Q1: was sollte ich, wenn meine Schnittstelle geändert hat: neu lackieren oder Invalidier?
Wenn das Layout aufgrund von Größenänderung, Schriftartenänderung usw. nicht auf dem neuesten Stand ist, sollten Sie invalidate aufrufen. Das Invalidieren einer Komponente macht die Komponente ungültig, und alle Eltern darüber werden als ausgelegt markiert. Vor dem Lackieren wird im Validierungsschritt, wenn keine Änderung gefunden wird, der Farbschritt weggelassen.
Wenn ein Teil der Komponente aktualisiert wird (definiert durch das Clip-Rechteck der Grafik, "beschädigt" Region), dann sollten Sie erwägen, Repaint aufzurufen. Einer der Gründe dafür, dass beschädigte Bereiche auftreten können, liegt in der Überschneidung eines Teils Ihrer Komponente aufgrund einer anderen Komponente oder Anwendung. Meiner Erfahrung nach ist das repaint() effektiver, wenn Sie es auf der innersten umschließenden Komponente aufrufen (d. H. Mit public void repaint(int x, int y, int width, int height)
anstelle der öffentlichen void repaint()
).
Q2: wann sollen sie aufgerufen werden?
Invalidate():
markiert eine Komponente als nicht gültig - das heißt, es ist das Layout ist oder nicht sein „up to date“ mehr: dh die Komponente der Größe verändert wird, wird eine Grenze hinzugefügt, es ist Schriftwechsel usw. Sie sollte niemals invalidate() manuell aufrufen, da swing das für Sie ziemlich genau für jede Änderung der Eigenschaft tut.
Wenn mehr als eine Region innerhalb des Steuerelements neu gezeichnet werden muss, führt Invalidate dazu, dass das gesamte Fenster in einem einzigen Durchgang neu gezeichnet wird, um Flimmern durch redundante Repaints zu vermeiden. Es gibt keine Leistungseinbußen für das mehrfache Aufrufen von Invalidate, bevor das Steuerelement tatsächlich neu gezeichnet wird.
Repaint() :
Wenn es sich bei der Komponente um eine Lightweight-Komponente handelt, ruft diese Methode so schnell wie möglich einen Aufruf der Malmethode dieser Komponente hervor. Andernfalls ruft diese Methode so bald wie möglich einen Aufruf der Aktualisierungsmethode dieser Komponente auf.
Schauen Sie sich auch Update
Methode.
HINWEIS: Swing-Prozesse "repraint" Anforderungen auf eine etwas andere Weise als die AWT, obwohl das Endergebnis für den Anwendungsprogrammierer im Wesentlichen das gleiche ist - paint() aufgerufen wird.
unten auf den Link finden Sie eine hervorragende Verbindung, wie Malerei in AWT und Swing getan wird:
http://www.oracle.com/technetwork/java/painting-140037.html
Hope this helfen.
Ich würde nicht sagen, "ungültig" und "revalidate" sind das gleiche. –