2012-06-01 20 views
5

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

1

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).

+0

Grazie mille! –

0

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.

1

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

+0

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? –

+0

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)'. –

0

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).