solo il mouse cliccato caso di aggiornamento JLabel proprietà text JLabel correttamente
Domanda
sto usando un filo java per aggiornare valore di testo JLabel nella mia applicazione ma dopo l'aggiornamento del testo sulla JLabel JLabel che mostra tutti i valori passati aggiornato e nuovo valore periodicamente per via rinfrescante stessa
ma quando uso stessa funzione di aggiornamento all'interno dell'evento mouseclick di JLabel esso si sta aggiornando una piacevole sorpresa e mostrando solo ultimo valore
che cosa può causare questo problema mi manca alcuni metodi che chiama internamente evento click del mouse?
Nore: applicazione è JApplet
Soluzione
È necessario garantire che le modifiche a Swing componenti dell'interfaccia utente vengono eseguite sul thread evento Dispatch. Qui ci sono due suggerimenti per realizzare questo:
Timer
Si consiglia di controllare le javax.swing .Timer se l'obiettivo è quello di aggiornare periodicamente il testo JLabel
. I timer incendi ActionEvent
s periodicamente sul filo evento Invio:
int delay = 1000; //milliseconds
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
label.setText("foo");
}
};
new Timer(delay, taskPerformer).start();
SwingWorker
In alternativa si consiglia di utilizzare un SwingWorker per eseguire l'elaborazione in background. Il thread in background lavoratore può comunicare informazioni al filo Evento spedizione chiamando publish
.
new SwingWorker<Void, String>() {
// Called by the background thread.
public Void doInBackground() {
for (int i=0; i<100; ++i) {
// Do work. Periodically publish String data.
publish("Job Number: " + i);
}
}
// Called on the Event Dispatch Thread.
@Override
protected void process(List<String> chunks) {
// Update label text. May only want to set label to last
// value in chunks (as process can potentially be called
// with multiple String values at once).
for (String text : chunks) {
label.setText(text);
}
}
}.execute();
Altri suggerimenti
Non so esattamente che cosa sta succedendo, ma vorrei iniziare da rendere sicuro il vostro aggiornamento avviene nel thread evento spedizione. Avere la chiamata filo di aggiornamento:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// ...update the text...
}
});
Vedere la Evento spedizione Discussione tutorial.
perché non do u provare questo: labelname .paintImmediately ( labelname .getVisibleRect ());