Java: Wie zeichne ich ein Overlay ohne Bildlauf über das ScrollPane-Ansichtsfenster?

Ich möchte ein ScrollPane verwenden, um ein Bild in seinem Ansichtsfenster anzuzeigen, und über dem Bild ein Raster (oder ein Kästchen oder eine andere Art von Registrierungs- / Positionsmarkierung) anzeigen. Ich muss die Überlagerung beim Scrollen fixieren (was bedeutet, dass sich das Bild "unter" der Überlagerung zu bewegen scheint). Ich werde die Ansicht im Ansichtsfenster mit einer festen Rate scrollen, um eine reibungslose Bewegung zu gewährleisten, und die Überlagerung soll einen Verweis auf eine bestimmte Stelle im Ansichtsfenster enthalten. Stellen Sie sich konzeptionell eine große Karte vor, die in einem Ansichtsfenster einen Bildlauf durchführt, und das Ansichtsfenster ein Rechteck aufweist, das sich (relativ zum Ansichtsfenster selbst) nicht bewegt und einen Bereich markiert, in den aufgrund einer Benutzeraktion hineingezoomt werden kann.

Ich gehe davon aus (aber habe es noch nicht bestätigt), dass die ScrollPane-Implementierung das Rendering der Ansicht effizient abwickelt (aus dem Sicherungsspeicher, nicht die gesamte Ansicht (oder sogar ViewPort) für jede neue Teilbelichtung neu zeichnen zu müssen), und würde es vorziehen, dies nicht zu tun Überschreiben Sie die paint () -Methode.

Ich habe mir LayerPane angeschaut und obwohl ich es nicht gemeistert habe, scheint es, dass dies ein Brute-Force-Ansatz ist. Das ScrollPane ist eine Komponente eines SplitPane und wird verschoben / in der Größe geändert. Ich gehe davon aus, dass ich die korrekte Beziehung zwischen dem ViewPort und dem LayerPane mithilfe der absoluten Positionierung manuell aufrechterhalten muss. Ich bin weit davon entfernt, ein Experte für GUI-Design und -Implementierung zu sein, und ich bin mir sicher, dass mir Möglichkeiten fehlen, die von offensichtlich bis dunkel und elegant reichen und die eine erfahrene Person kennen würde.

Ich bin offen für Vorschläge, nicht nur für den Weg, den ich eingeschlagen habe. Soll (kann) ich ein JPanel als eine Komponente in meinem SplitPane hinzufügen und dann ein LayerPane zu dem hinzufügen, der mein ScrollPane und das Overlay (ein anderes JPanel) auf verschiedenen Layern im LayerPane enthält? Gibt es Funktionen in ScrollPane, die dies direkt unterstützen? Ich habe mir die Java Swing Tutorials und die API-Dokumentation angesehen, aber noch nichts gesehen.

Vielen Dank.

AKTUALISIEREN:

Danke für den Link, Trashgod. Das war viel einfacher als ich erwartet hatte. Keine Notwendigkeit für LayerPane, GlassPane, xor-basiertes Compositing ... Ich weiß nicht, warum es mir nicht eingefallen ist, JViewport.paint () zu überschreiben, um mein Overlay zu zeichnen - aber mit dem folgenden Code habe ich das Konzept validiert gib mir was ich suche Verwenden Sie einfach die Unterklasse von JViewport und es wird ausgeführt, was ich wollte (in diesem Fall wird ein Rechteck in der Mitte des Ansichtsfensters überlagert, während das Bild darunter rollt). Ich bin kein GUI-Experte und die Java-API ist unglaublich umfangreich. Ich habe keine Ahnung, wie ihr das alles im Kopf habt - aber danke!

<code>class MyViewport extends JViewport {
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        Graphics2D g2 = (Graphics2D)g;
        g2.setPaint(Color.BLACK);
        g2.drawRect(getWidth()/4,getHeight()/4,getWidth()/2,getHeight()/2);
    }
}
</code>

Antworten auf die Frage(1)

Ihre Antwort auf die Frage