Compteur de temps textField
imane
-
greg6614 Messages postés 592 Date d'inscription Statut Membre Dernière intervention -
greg6614 Messages postés 592 Date d'inscription Statut Membre Dernière intervention -
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
merci d'avance pour votre réponse
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:
- Compteur de temps textField
- Compteur électrique - Guide
- Compteur de contractions - Télécharger - Santé & Bien-être
- Renommer plusieurs fichiers en même temps - Guide
- Comment ralentir un compteur linky forum - Accueil - Objets connectés
- Combien de temps reste une story sur facebook - Guide
1 réponse
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
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
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é.
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é.