Far variare una Jlabel ogni tot secondi

di il
6 risposte

Far variare una Jlabel ogni tot secondi

Vorrei settare il testo di una label e voglio che vari ogni secondo dopo avere premuto un button,

ho scritto questo:

JButton btnNewButton = new JButton("prova thread");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {


Thread t = Thread.currentThread();
t.setName("Thread principale");
t.setPriority(10);
System.out.println("Thread in esecuzione: " + t);


String[] NOMI = new String[5];

NOMI[0] = "aaa";
NOMI[1] = "bbb";
NOMI[2] = "ccc";
NOMI[3] = "ddd";
NOMI[4] = "eeee";


try {
for (int n = 0; n < 5; n++) {

System.out.println(NOMI[n]);

lblNomiDaPlttare.setText(NOMI[n]);


t.sleep(1000);
}
}
catch (InterruptedException e) {
System.out.println("Thread interrotto");
}
}
});
btnNewButton.setBounds(50, 238, 147, 94);
frameDelleSezioni.getContentPane().add(btnNewButton);

il System.out plotta i miei nomi ogni secondo perfettamente, ma invece il label solo alla fine con l' ultimo nome.
dove sbaglio ?
GRAZIE

6 Risposte

  • Re: Far variare una Jlabel ogni tot secondi

    kerikcos ha scritto:


    il System.out plotta i miei nomi ogni secondo perfettamente, ma invece il label solo alla fine con l' ultimo nome.
    dove sbaglio ?
    Sbagli nel senso che non conosci bene come funziona il "threading" in Swing.
    È una cosa che ho spiegato tante volte sui forum (che non starei nemmeno a ripeterla ), ad esempio vedi in questa discussione.
  • Re: Far variare una Jlabel ogni tot secondi

    Credo di aver risolto in questo modo:

    startButton = new JButton("START");
    startButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
    startButton.setEnabled(false);
    timer.start();
    }
    });
    startButton.setBounds(307, 184, 133, 112);
    frameDelleSezioni.getContentPane().add(startButton);

    //Creo un timer
    timer = new Timer(1000, new ActionListener() {
    public void actionPerformed(ActionEvent evt) {

    String[] NOMI = new String[5];
    NOMI[0] = "aaa";
    NOMI[1] = "bbb";
    NOMI[2] = "ccc";
    NOMI[3] = "ddd";
    NOMI[4] = "eeee";

    System.out.println(NOMI[n]);
    lblNomiDaPlottare.setText(NOMI[n]);

    n++;
    startButton.setEnabled(true);

    if(n>=5){ timer.stop();};
    }
    });

    anche se mi sembra un po laborioso.
  • Re: Far variare una Jlabel ogni tot secondi

    kerikcos ha scritto:


    anche se mi sembra un po laborioso.
    La programmazione in Swing ... è così. Se hai compreso bene quello che dicevo nella discussione linkata prima, è già una cosa molto buona.
    Dovrai abituarti ai listener, alle inner class (spesso e volentieri le "anonymous" inner class), ai Timer, ai Runnable con SwingUtilities.invokeLater e anche altre cose.
  • Re: Far variare una Jlabel ogni tot secondi

    Ho provato a creare una varibbile tempo

    int tempo ;


    //Create a timer.
    timer = new Timer(tempo, new ActionListener() {
    public void actionPerformed(ActionEvent evt) {


    System.out.println(NOMI[n]);
    lblNomiDaPlottare.setText(NOMI[n]);

    n++;
    startButton.setEnabled(true);

    if(n>=NOMI.length){ timer.stop(); n=0;};
    }
    });

    ma quando la cambio durante l esecuzione del programma la routine del timer non mi risponde, cosa sbaglio.
  • Re: Far variare una Jlabel ogni tot secondi

    kerikcos ha scritto:


    ma quando la cambio durante l esecuzione del programma la routine del timer non mi risponde, cosa sbaglio.
    Il costruttore di Timer riceve una COPIA del valore che ha tempo in quel momento. Dopo che il Timer è stato istanziato, cambiare tempo NON ha alcuna influenza sul Timer.

    Timer ha il setDelay(int delay)
  • Re: Far variare una Jlabel ogni tot secondi

    Ok così funziona perfettamente !!!
    grazie mille
Devi accedere o registrarti per scrivere nel forum
6 risposte