[JAvA] faire un compteur sous swing

voilalesoleil Messages postés 5 Date d'inscription lundi 4 décembre 2000 Statut Membre Dernière intervention 4 octobre 2013 - 24 nov. 2008 à 11:13
dvoraky Messages postés 744 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 9 mai 2010 - 24 nov. 2008 à 14:30
Bonjour,

Voilà mon problème, je souhaite faire défiler un compteur : 10, 9, 8 ... toutes les secondes.

Dans la console, pas de problème. Cependant j'ajoute une petite complexité, il faut que ce défilement s'affiche dans un label.

A partir de là, cela se complique. Ma fenêtre refuse de s'afficher
tant que le décompte n'est pas arrivé à la fin. Du coup je ne vois pas
le défilement se faire ...

HELP !!

voilà mon code :

public class test extends javax.swing.JFrame {

static int iTimeUp = 10;

/** Creates new form test */

public test() {

initComponents();

lCountTime.setText("");

Affichage();

}

public static void Affichage() {

if (iTimeUp == 0) {

iTimeUp = 10;

}

while (iTimeUp != 0) {

lCountTime.setText(Integer.toString(iTimeUp));

System.out.println(iTimeUp);

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

iTimeUp--;

}

}

public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

new test().setVisible(true);

}

});

}

2 réponses

dvoraky Messages postés 744 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 9 mai 2010 8
24 nov. 2008 à 14:19
Salut,

Je te conseille de regarder du côté de la classe javax.swing.Timer
Cela permet de créer un objet qui a en paramètre un délai et une action.
Après un certain délai, ce timer va exécuter l'action, ça construirait comme ça pour toi :

Timert

=
new Timer(1000,
new ActionListener() {

   @Override

   public
void actionPerformed(ActionEvent e) {      Test.

this.
lCountTime .setText(Integer.toString(Test.this
.
iTimeUp));

      Test.this.iTimeUp--;   }

});

Seulement, je te conseille de faire plutot des getters et setters pour récupérer la valeur du compteur et pour affecter la nouvelle valeur à ton JLabel.

Ensuite, il te suffit de faire une simple boucle "for" qui va compter 10 fois dans laquelle tu lanceras ton timer :

// dans affichage par exemple
for

(
int i = 0; i < 10; i++) {

         t.start();

}

Et voilà, le tour est joué

<hr width="100%" size="2" />
 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
0
Rejoignez-nous