revalidate(), invalidate(), validate(), repaint() -- Inselupdate
Jede Swing-Komponente liegt zwangsläufig in einem Container. Die Ausmaße der meisten Container sind von der Größe der Kinder abhängig, sodass sie mitbekommen müssen, wenn sich die Größe der Kinder verändert. Wenn etwa ein JLabel einen Text mit einer anderen Länge bekommt, so muss auch der Container sich neu darstellen und seine Kinder neu ausrichten. Diese Mitteilung sendet eine Komponente über die Methode revalidate().
Aus javax.swing.JLabelDas revalidate() ist eine geerbte Funktion aus JComponent. Sie ruft im AWT-Event-Thread invalidate() auf und setzt die aktuelle Komponente auf einer Liste der invaliden Komponenten, die beim nächsten Zeichen aktualisiert werden müssen.
public void setText( String text ) {
...
revalidate();
repaint();
...
}
Aus javax.swing.JComponentDas invalidate() ist eine aus Container geerbte Funktion, die allen übergeordneten Swing-Container nach oben und allen Kindern unten mitteilt, dass das Layout nicht mehr aktuell ist. Die Aufforderung zur Neudarstellung übernimmt addInvalidComponent(). Die Methode legt ein Event in die Event-Queue, in der alle invaliden Komponenten vermerkt sind. Beim Neuzeichnen ruft der Event-Thread auf allen diesen Komponenten die Berechnungsfunktion validate() auf, damit das Layout wieder stimmt. Der Container überschreibt validate() und ruft die protected-Methode validateTree() auf, was die Komponenten des Containers zur Neuberechnung auffordert. Halten wir noch drei Aussagen fest:
public void revalidate() {
...
invalidate();
RepaintManager.currentManager( this ).addInvalidComponent( this );
...
}
• Eine Neuzeichnung ist mit invalidate() nicht verbunden. Die Funktion
markiert nur Komponenten.
• Eine Neuberechnung ist mit invalidate() nicht verbunden, denn invalidate()
ruft nicht validate() auf.
• Das validate() führt ebenfalls nicht zur Neudarstellung, sondern nur zur
Neuberechung der Größen.
Labels: Insel

0 Comments:
Kommentar veröffentlichen
<< Home