Sto giocando un po 'con la classe grafica Java e mi stavo chiedendo - quando è necessario chiamare il metodo repaint()
? Ho provato a commentarlo e non sembrava influenzare la mia GUI di output. Ho visto che ha usato molto nel codice della GUI Java che ho letto, però. Qualcuno dispiacerebbe spiegare quando usarlo e quando non usarlo?repaint() Metodo in Java
risposta
Non è mai veramente necessario nella maggior parte delle applicazioni swing, perché lo gestiscono automaticamente (per operazioni comuni come la modifica dei valori di testo sui pulsanti e l'aggiunta di dati a una casella di riepilogo).
Generalmente, è solo se è stata apportata una sorta di modifica che l'oscillazione non viene rilevata automaticamente, ad esempio, non si sta utilizzando un gestore di layout e si stanno ridimensionando i componenti manualmente (in quanto normalmente il gestore di layout ripristina il suo componenti quando necessario).
Quando si avvia l'applicazione, si "dipinge" la GUI.
È necessario chiamare repaint()
quando si desidera rielaborare la GUI perché è stato modificato qualcosa all'interno.
Se si desidera eliminare un pulsante, è necessario rimuoverlo (o renderlo invisibile), quindi è necessario chiamare validate()
o repaint()
per ricalcolare (ridisegnare) la GUI.
Il repaint()
aggiorna la vista (componente), quindi ogni volta che si apportano modifiche al componente, è necessario chiamarlo. Per esempio, se si ruota il componente grafico, è necessario effettuare una chiamata a repaint()
al fine di vedere il cambiamento del componente contenente
Grazie per la spiegazione! In realtà sto cercando di rendere la mia grafica tale che quando un utente fa clic sull'asse x (è una trama di velocità del suono), il grafico si ingrandirà su quella particolare parte del grafico. Sono un po 'bloccato su come farlo. Hai qualche idea? –
Questo è quello che probabilmente farei: Ottieni il coordonato del punto su cui ho fatto clic, dato da 'getX()' e 'getY()'. Quindi crea un grafico ** g ** che sarà l'area che voglio mostrare e 'ripain (g)'. –
L'unica roba che posso pensare:
new Thread() {
@Override
public void run() {
while (ClassName.this.isVisible()) {
ClassName.this.updateStatusLabel();
ClassName.this.validate();
ClassName.this.repaint(50L);
try {
Thread.sleep(1000);
} catch (final InterruptedException e) {
Log.log(e);
}
}
}
}.start();
Supponiamo di avere la sopra il codice nel costruttore di un JDialog. Cosa updateStatusLabel esegue il controllo di una variabile booleana, pubblica o impostabile tramite un metodo, e imposta l'icona di una JLabel in base a tale valore booleano. Se non si convalida e si ridisegna la GUI, la modifica non verrà mostrata fino a quando non viene lanciato un altro evento, molto probabilmente un triggerato dall'utente. E, se l'utente è in attesa che l'etichetta mostri una determinata icona a causa di, diciamo, indica se un dispositivo è raggiungibile attraverso Internet, non interagirà mai (o, almeno, stai ritardando le interazioni così tanto).
Grazie mille! –