Darstellung der Annotationsselektion anpassen

Wenn der Benutzer eine oder mehrere Annotationen mittels des AnnotationTool selektiert, zeichnet die jadice document platform einen Rahmen um die Bounding Box der Selektion. Die Darstellung dieses Rahmens ist über das Interface AnnotationSelectionRenderer vollständig austauschbar. Integratoren können so das visuelle Erscheinungsbild der Annotationsselektion an die Anforderungen der eigenen Anwendung anpassen.

Standardimplementierung DefaultAnnotationSelectionRenderer

Die Klasse DefaultAnnotationSelectionRenderer ist die vorkonfigurierte Implementierung des AnnotationSelectionRenderer. Sie zeichnet einen gestrichelten Rahmen um die Bounding Box der Selektion. Die Darstellung ist zweischichtig:

  • Zunächst wird ein halb-transparenter weißer Rahmen gezeichnet (Kontrast-Unterlage).

  • Darüber wird ein halb-transparenter schwarzer, gestrichelter Rahmen (4 px an, 4 px aus) gezeichnet.

Die Koordinaten werden vor dem Zeichnen auf ganzzahlige Pixelwerte gerundet. Damit wird der Rahmen an das Pixelraster ausgerichtet, um unschärfere Kanten und Flackern bei der Skalierung zu vermeiden. getSelectionOffset() liefert (0, 0), da der Rahmen vollständig innerhalb der Selektions-Bounding-Box gezeichnet wird. Die Klasse eignet sich als Basisklasse für eigene Implementierungen.

Registrierung am AnnotationTool

Der Renderer wird nach der Registrierung des AnnotationTool am ToolManager gesetzt:

@CallOnEDT
private void configureToolManager(ToolManager tm) {
  // AnnotationTool registrieren
  tm.register(AnnotationTool.class, true);

  // Eigenen Renderer registrieren
  tm.getTool(AnnotationTool.class).setAnnotationSelectionRenderer(new MyAnnotationSelectionRendererImpl());
}

Beispielimplementierung eines AnnotationSelectionRenderer

Für eine eigene Implementierung stehen zwei Varianten zur Verfügung.

Variante A: Interface direkt implementieren

Geeignet, wenn die Standarddarstellung vollständig ersetzt werden soll.

private static class MyAnnotationSelectionRendererImpl implements AnnotationSelectionRenderer {

  @Override
  public void render(Rectangle2D bounds, List<Annotation> selection, RenderParameters parameters) {
    Graphics2D g2 = parameters.getGraphics();
    Rectangle2D screen = AffineTransforms.createTransformedBounds2D(parameters.getTransform(), bounds);

    Stroke previousStroke = g2.getStroke();
    Color previousColor = g2.getColor();
    try {
      g2.setColor(new Color(0, 108, 255, 128));
      g2.setStroke(new BasicStroke(5));
      g2.draw(screen);
    } finally {
      g2.setStroke(previousStroke);
      g2.setColor(previousColor);
    }
  }

  @Override
  public Point2D getSelectionOffset() {
    return new Point2D.Double(0, 0);
  }
}

Variante B: DefaultAnnotationSelectionRenderer erweitern

Geeignet, wenn die Standarddarstellung beibehalten und ergänzt werden soll. Die Basisklasse übernimmt das Zeichnen des Standard-Rahmens; die eigene Implementierung kann davor oder danach weitere Elemente hinzufügen. Das nachfolgende Beispiel MyAnnotationSelectionRenderer zeigt dieses Vorgehen.

private static class MyAnnotationSelectionRenderer extends DefaultAnnotationSelectionRenderer {

  private final Point2D offset = new Point2D.Double(30, 30);

  @Override
  public void render(Rectangle2D bounds, List<Annotation> selection, RenderParameters parameters) {
    // Standard-Marquee zeichnen
    super.render(bounds, selection, parameters);

    Graphics2D g2 = parameters.getGraphics();
    Rectangle2D screen = AffineTransforms.createTransformedBounds2D(parameters.getTransform(), bounds);

    // Selektionsrahmen um den Offset vergrößern
    screen.setFrame(
        screen.getX() - offset.getX() / 2,
        screen.getY() - offset.getY() / 2,
        screen.getWidth() + offset.getX(),
        screen.getHeight() + offset.getY());

    Stroke previousStroke = g2.getStroke();
    Color previousColor = g2.getColor();
    try {
      g2.setColor(new Color(0, 108, 255, 128));
      g2.setStroke(new BasicStroke(10, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
      g2.draw(screen);
    } finally {
      g2.setStroke(previousStroke);
      g2.setColor(previousColor);
    }
  }

  @Override
  public Point2D getSelectionOffset() {
    return offset;
  }
}
[jadice viewer Version 6.2.221: Dokumentation für Entwickler. Veröffentlicht: 2026-09-14]