Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2016
    Messaggi
    3

    Problema actionPerformed e JLabel?

    Ho problema con un una parte di un mio programma. In particolare, quando viene chiamato il Listener di un bottone (JButton),dovrei aumentare un contatore (non importa fino a che valore) ogni 'x' secondi e il valore deve essere visualizzato in una Label. Quindi inizialmente ho pensato di incrementare una variabile di un ciclo for, farlo scrivere nella Label e poi farlo aspettare 'x' secondi, in modo tale da vedere 1,2,3... nella Label. Il problema è che quando mando in esecuzione e premo il bottone, il programma aspetta per il numero di secondi totali e alla fine visualizzo solo l'ultimo valore assunto della variabile alla fine del ciclo for. Come posso fare? lascio la parte di codice interessata

    public void actionPerformed(ActionEvent arg0)
    {
    int a;
    for (a=0; a<100; a++)
    {
    l1.setText(Integer.toString(a));
    try {
    Thread.sleep(1000);
    }
    catch (InterruptedException e)
    {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    dove l1 è la JLabel

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da tia9829 Visualizza il messaggio
    Il problema è che quando mando in esecuzione e premo il bottone, il programma aspetta per il numero di secondi totali e alla fine visualizzo solo l'ultimo valore assunto della variabile alla fine del ciclo for.
    Classicissimo errore (per chi non conosce bene il threading in Swing). Ne ho parlato talmente tante volte sul forum ... ad esempio: qui e qui.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2016
    Messaggi
    3
    Ok, ho compreso che in questo modo le modifiche le vedrò solo quando il controllo ritorna al framework. Come posso fare per 'scongelare' la mia interfaccia e rendere visibile l'incremento nella label, utilizzando altre strutture?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da tia9829 Visualizza il messaggio
    Come posso fare per 'scongelare' la mia interfaccia e rendere visibile l'incremento nella label, utilizzando altre strutture?
    Se hai letto la seconda discussione linkata, hai visto che parlavo di "timer" (javax.swing.Timer) per fare cose in modo temporizzato senza grosse pretese su precisione/accuratezza del timing.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2016
    Messaggi
    3
    Capito, ti ringrazio e scusa per la banalità delle mie domande ahahahah

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.