Compteur de temps textField

Fermé
imane - Modifié par NHenry le 18/03/2016 à 23:29
greg6614 Messages postés 592 Date d'inscription vendredi 7 août 2009 Statut Membre Dernière intervention 3 juin 2017 - 19 mars 2016 à 12:52
Bonjour,
Bonjour;
s'il vous plait je veux afficher dans un textField un nombre qui se décroit automatiquement après un certain temps
mais je sais pas comment je peux le faire puisque l'affichafe n'est pas relie à aucun evenement
voici le code que j'ai développer
il fonctionne bien au niveau de console mais pas dans l'interface graphique

int compteurTemps(){
int leTempsEnMillisecondes=60000;
int i=0; 
for ( i=4;i>=0;i--)
{try { Thread.sleep (leTempsEnMillisecondes);} 
catch (InterruptedException e) { System.out.print("erreur");}
System.out.print(i);
}
return i;
}

je sais pas ou je peux faire l'appel de méthode
jTextField1.setText(Integer.valueOf(compteurTemps()).toString());
je la mettre dans le constructeur mais ca marche pas aussi
dans 
private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) { 
// TODO add your handling code here:
jTextField1.setText(Integer.valueOf(compteurTemps()).toString());
} 

merci d'avance pour votre réponse




EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
A voir également:

1 réponse

greg6614 Messages postés 592 Date d'inscription vendredi 7 août 2009 Statut Membre Dernière intervention 3 juin 2017 107
19 mars 2016 à 12:52
Salut,

quand tu veux faire une modification sur ton IHM tu dois penser à une règle simple : TOUS les changements graphiques doivent être effectué dans l'EDT (Event Dispatch Thread).

Il est fondamental de bien comprendre ça. Quand tu lances un programme JAVA en mode console, deux Threads sont créés : un Thread principal pour empiler les instructions de ton programmes jusqu'à la fin et un pour les tâches de fond comme des lancements de nouveaux Threads par exemple.

En graphique, un troisième Thread est lancé, c'est l'EDT qui s'occupe de tous les changements graphiques.

Quand tu fais un appel à une méthode
actionPerformed
, son contenu est exécuté dans l'EDT. Problème, s ton traitement est long, toute ton IHM sera figée (peut être as-tu déjà eu un soucis similaire avec un cas classique comme l'incrémentation d'une JProgressBar)

Pour utiliser l'EDT il y a la classe SwingUtilities (je t'invite à consulter sa JavaDoc) qui permet d'insérer du code dans l'EDT.

Il y a également la classe SwingWorker<T,V> qui est une classe abstraite qui permet d'effectuer des tâches de fond tout en dialoguant avec l'EDT. Comme c'est une classe abstraite tu dois redéfinir la métode
doInBackground()
pour l'utiliser.

Avec tous ces éléments tu devrais pouvoir comprendre pourquoi ça ne marche pas. Après sache que le petit but de code que tu nous as fournis n'aide pas vraiment, si l'on a pas la structure complète dans laquelle ton JTextField est instancié.
1