Swing Revalidate weniger Ressourcenverbrauchen als repaint()

Status
Nicht offen für weitere Antworten.

icarus2

Top Contributor
Huhu

Wenn ich meine Klasse von JPanel ableite und da paintComponent() verwede gibts ja die Methode repaint().

Da ich bald mal ein kleines Spiel programmieren möchte habe ich mich nun gefragt, ob diese Methode nicht etwas viele Ressourcen braucht wenn da die ganze Zeit immer repaint() aufgerufen wird.

Ich habe mal wieder etwas in meinem Java-Buch gelesen und bin da auf revalidate gestossen. So wie ich das verstanden habe wird da nur eine einzige Komponente im Container aktualisiert.

Daraus habe ich die Schlussfolgerun gezogen, dass revailidate() weniger Ressourcen braucht und somit für einzelne aktualisierungen besser geeignet ist...

Stimmt das? Oder gäbe es da noch bessres?
 

Ebenius

Top Contributor
Nein.

repaint() macht eigentlich fast nichts. Die Methode markiert eine Komponente als schmutzig. Dann legt sie einen PaintEvent in die EventQueue (sofern nicht schon einer drin liegt). Wenn der EventDispatcher einen PaintEvent abarbeitet zeichnet er alle schmutzigen Bereiche neu.

Siehe: RepaintManager (Java Platform SE 6)

validate(), invalidate() und revalidate() sind Methoden zur Steuerung des Layouts. invalidate() markiert, dass die Kinder einer Komponente neu angeordnet werden müssen. validate() ordnet die Kinder der Komponente per LayoutManager neu an. revalidate() ist etwas mächtiger und markiert die Komponente als ungültig und schmutzig. Dann passiert beim nächsten Zeichnen erst ein Neuanordnen der Kind-Komponenten und danach ein Neuzeichnen; ebenfalls per RepaintManager.

Ergo: Validate / Repaint sind unterschiedliche Dinge. Wenn man keine Kind-Komponenten hat, braucht man kein validate. In jedem Fall ist aber repaint() leichtgewichtiger als revalidate().

Ebenius
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben