D
Des
Gast
Hallo Community!
Ich schildere erstmal mein Problem, ich hoffe, es ist nicht zu konfus:
Ich habe meine Spielfläche auf einem JPanel, das in einem JScrollPane liegt. Dieses soll selbstständig scrollen, wenn man die Maus in einen gewissen Bereich bewegt. Das funktioniert auch schon soweit, aber:
Ich bewege das JScrollPane mit scrollPane.getViewport().scrollRectToVisible(Rectangle r); um 5 Pixel pro Schleifendurchlauf.
Der Aufruf dieser Zeile dauert unter Umständen an einem leicht betagten Rechner aber sehr lange. (An einem Q6600 ist alles toll, am Atom oder Pentium4 treten bei 100% CPU Auslastung die Probleme auf.) Wenn ich die Zeit vor und nach scrollRectToVisible(Rectangle r) messe, bekomme ich zwischen den beiden Zeiten Differenzen von 30 bis 75 Millisekunden. Das hat zur Folge, dass das ScrollPane sehr ruckartig und unregelmäßig scrollt.
Zum Inhalt des zu scrollenden Panels: Der Viewport ist ein JPanel auf das ich direkt mehrere (sehr viele, durchaus auch übereinander) BufferedImages male (awt). Ich habe also die paint()-Methothe des JPanels überschrieben und male alle sichtbaren Bilder mit drawImage(). Ich weiß, das soll man wohl irgendwie anders machen, aber insgesamt dauern aber die paint()-Aufrufe nur 8-15 Millisekunden (dies ließe sich bestimmt optimieren, sehe aber hier im Moment noch kein Problem).
Kommen wir zu meiner Frage: Wieso dauert das scrollRectToVisible so lange, wenn das eigentliche malen des Viewports so schnell geht? Wie kann man das Problem beheben? Was macht scrollRectToVisible intern eigentlich so alles?
zur Lösung des Problems: Hilft es, wenn ich das JScrollPane rausschmeiße und mein Panel per Hand (zB setBounds) herumschiebe?
Danke
Daniel
Ich schildere erstmal mein Problem, ich hoffe, es ist nicht zu konfus:
Ich habe meine Spielfläche auf einem JPanel, das in einem JScrollPane liegt. Dieses soll selbstständig scrollen, wenn man die Maus in einen gewissen Bereich bewegt. Das funktioniert auch schon soweit, aber:
Ich bewege das JScrollPane mit scrollPane.getViewport().scrollRectToVisible(Rectangle r); um 5 Pixel pro Schleifendurchlauf.
Der Aufruf dieser Zeile dauert unter Umständen an einem leicht betagten Rechner aber sehr lange. (An einem Q6600 ist alles toll, am Atom oder Pentium4 treten bei 100% CPU Auslastung die Probleme auf.) Wenn ich die Zeit vor und nach scrollRectToVisible(Rectangle r) messe, bekomme ich zwischen den beiden Zeiten Differenzen von 30 bis 75 Millisekunden. Das hat zur Folge, dass das ScrollPane sehr ruckartig und unregelmäßig scrollt.
Zum Inhalt des zu scrollenden Panels: Der Viewport ist ein JPanel auf das ich direkt mehrere (sehr viele, durchaus auch übereinander) BufferedImages male (awt). Ich habe also die paint()-Methothe des JPanels überschrieben und male alle sichtbaren Bilder mit drawImage(). Ich weiß, das soll man wohl irgendwie anders machen, aber insgesamt dauern aber die paint()-Aufrufe nur 8-15 Millisekunden (dies ließe sich bestimmt optimieren, sehe aber hier im Moment noch kein Problem).
Kommen wir zu meiner Frage: Wieso dauert das scrollRectToVisible so lange, wenn das eigentliche malen des Viewports so schnell geht? Wie kann man das Problem beheben? Was macht scrollRectToVisible intern eigentlich so alles?
zur Lösung des Problems: Hilft es, wenn ich das JScrollPane rausschmeiße und mein Panel per Hand (zB setBounds) herumschiebe?
Danke
Daniel