Swing Größenänderung vom JPanel im JScrollPane und anschließendes positionieren

washpuda54

Mitglied
Hi,

ich hoffe, es kann mir jemand helfen. Ich Schreibe gerade einen kleines Tool zum betrachten von Bildern. Das Bild wird dabei auf einen JPanel gezeichnet welches sich in einem JScollpane befindet. Das Bild kann natürlich gedreht, gezoomt und verschoben werden. Wird das Bild durch das zoomen vergrößert, passe ich die Größe mit panel.setPreferredSize(newWidth newHeight); an. Über den Componentlistener stelle ich fest, dass die Größenänderung vom Panel abgeschlossen ist. Erst dann (vorher klappt das nicht) verschiebe ich das Panel mit scrolPane.getViewport().setViewPosition(newViewPos) so, dass die ursprüngliche Position des Bildes wie vor der Transformation ist.

Das Problem ist (insbesondere beim schnellen zoomen mit dem Mausrad), dass das Bild bereits einmal nach dem setzen von PreferredSize automatisch gezeichnet wird und und nochmal durch das anschließende verschieben. Dadurch blitzt das Bild bei der Größenänderung machmal auf was unschön ist.

Vielleicht hat ja jemand eine Idee, wie sich dieser Effekt vermeiden lässt.
 
Habe mittlerweile selbst eine Lösung gefunden, vielleicht hilft es ja mal jemand.

Bevor ich die Größe des Panels ändere, unterdrücke ich mit scrolPane.setIgnoreRepaint(true); das zeichnen und erlaube es erst wieder, wenn die Größenänderung mit dem Listener festgestellt wurde und bevor das bild verschoben wird. (Wichtig, die Paintmethode vom Scrollpane muss überschrieben werden. Mit getIgnoreRepaint wird abgefragt ob das Zeichnen unterdrückt werden soll, wenn ja erfolgt der Abbruch ohne super.paint(g) aufzurufen. );

Ich bin mir nicht sicher ob dies der professionelle Weg ist, aber es funktioniert.
 

Zurück
Oben