J'aimerai avoir un timer qui fasse office de chronomêtre. Je ne comprends pas trop le timer de swing avec les ActionListener.
N'y a - t - il pas un moyen plus simple?
merci
J'aimerai avoir un timer qui fasse office de chronomêtre. Je ne comprends pas trop le timer de swing avec les ActionListener.
N'y a - t - il pas un moyen plus simple?
merci
Bonjour ,
ou plutot javax.swing.Timer compte tenu de ce dont tu parles
C'est simple d'utilisation ,tu definie ton ActionListener dans lequel tu is comment va fonctionner ton chronometre(minute,seconde ...) et apres tu definie ton temps ("delay") d'exection de l'action et pour le demarrer il suffit de faire tonTimer.start();Timer(int delay, ActionListener listener)
Creates a Timer that will notify its listeners every delay milliseconds.
Je te laisse faire et ensuite propose quelque chose si tu y arrive pas je te montrerai
Sinon tu peux aussi utiliser java.lang.Thread
@+
Voici un code que j'ai récupéré et modifié:
J'essaye d'afficher l'heure courante à chaque seconde.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 import java.lang.*; import java.awt.*; import javax.swing.*; import javax.swing.border.*; import java.awt.event.*; public class Main { private static int heure=0,minute=0,seconde=0; public static void main(String[] args) { /* Le timer */ int delais=1000; ActionListener tache_timer; /* Action réalisé par le timer */ tache_timer= new ActionListener() { public void actionPerformed(ActionEvent e1) { seconde++; if(seconde==60) { seconde=0; minute++; } if(minute==60) { minute=0; heure++; } System.out.println(heure+":"+minute+":"+seconde); } }; /* instanciation du timer */ final Timer timer1= new Timer(delais,tache_timer); timer1.start(); } }
Qu'est ce qui cloche?
merci
BOnjour
Ce qui cloche c'est que dans ton code je ne vois que l'affichage d'un chrono qui demarre à chaque execution.et je ne vois nul part la recuperation de l'heure systeme.Qu'est ce qui cloche?
Si tu veux afficher l'heure courante chaque seconde commences par recupperer l'heure systeme et l'afficher recupperer l'heure systeme Gregorian Calendar
.Au lieu d'afficher ton chrono tu recupere heure,minute et seconde systeme et tu l'affiches
Ps:je crois que ton code parle mode graphique et non mode console
@+
Oui en effet c'est pompé d'un chrono graphique.
Mais moi ce que je veux c'est juste avoir un chrono.
Je ne veux pas forcément l'heure courante, je veux dans un premier temps avoir la valeur du chrono depuis que je l'ai lancé à un instant t.
Y a - t- il un autre moyen qu'avec le Timer de Swing?
merci
Mais tu veux le faire en mode graphique ou en mode console?(sinon ton code fonctionnera bien en mode graphique)
Voilà je sais ce qui m'embête vraiment:
Je ne veux pas déclencher le chrono à lors de l'appui d'un bouton.
Mon évènement est simplement l'ouverture de la fenêtre où est affiché un chrono.
Comment traduire ceci en évènement?
merci
SI tu ne veux pas que l'evenement soit associé a ton bouton t'a seulement qu'a pas le lui associer,je veux dire tonTimer.start() tu le place dans le code qui lance directement ta fenetre,ce qui fera qu'a l'ouverture de la fenetre le chrono se lancera tout seulEnvoyé par piotrr
Ex:Supposons qu'on a une classe qui permet de creer une fenetre avec un JLabel dedans qui affiche le chrono,(Fenetre());
il suffit de mettre ton code precedent dans ta classe en remplacant le "System.out.println()" par un JLabel et declencher le timer dans le constructeur Fenetre()
Et dans ton main
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public class Fenetre extends JFrame{ ........ ........ public Fenetre(){ .......... ......... ....... tonTimer.start(); ........... } .............. }
Il faut juste lancer le timer au chargement de la fenetre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Fenetre frame=new Fenetre(); ......................
@+
Ne sachant pas ce que tu veux faire,
Je vais tenter expliquer pourquoi ton test n'affiche rien.
Tout simplement car il n'y a aucun thread "user" de démarré.
Donc il attend pas la fin de ton timer car le Timer utilise un thread Daemon.
Pour info la JVM se termine quand il n'y a plus de thread "user".
Si tu veux que ton test fonctionne il suffit d'ajouter :
Et ensuite ton test fonctionnera pendant 10 sec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 timer1.start(); try{ Thread.sleep (10000); }catch (InterruptedException ignore) { }![]()
Bonjour
Ou plutot utiliser dans ce cas java.util.Timer si tu veux le faire en mode consoleEnvoyé par elmor
Alors soyons d'accord une fois pour toute tu veux ton truc en mode Console ou graphique?
@+
Je veux un Timer en mode GRAPHIQUE qui m'affiche un chronomêtre qui indique la durée d'ouverture d'une fenêtre dans celle - ci même.
Désolé de ne pas être très précis et de ne pas comprendre grand chose aux Threads ...
Autre chose, si je n'associe pas mon Timer à un bouton ou un quelconque autre widget, alors je n'ai plus d'ActionListener, et si je n'ai plus d'ActionListener alors comment j'instancie mon Timer? ( Timer( int delay, ActionListener ) )
merci beaucoup
j'ai un exemple plus concret pour toi j'ai une classe qui permet de creer une petite fenetre (t'inquiete pas pour le code c'est un truc vite fait juste pour te montrer ce que je veux dire)Autre chose, si je n'associe pas mon Timer à un bouton ou un quelconque autre widget, alors je n'ai plus d'ActionListener, et si je n'ai plus d'ActionListener alors comment j'instancie mon Timer? ( Timer( int delay, ActionListener ) )
Ensuite ce que tu as a faire c'est de creer la fenetre dans le main et tu veras le chrono demarrer au lancement de la fenetre
Maintenant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 package test; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.Timer; public class Frame extends JFrame{ //Declaration de variables private int heure=0,minute=0,seconde=0; private int delais=1000; private JLabel label=new JLabel(""+heure+":"+minute+":"+seconde); private ActionListener tache_timer; private Timer timer1; public Frame(){ //Ajout de notre Jlabel au composant fenetre this.getContentPane().add(label); chrono(); } //Methode pour lancer notre chrono public void chrono(){ tache_timer= new ActionListener() { public void actionPerformed(ActionEvent e1) { seconde++; if(seconde==60) { seconde=0; minute++; } if(minute==60) { minute=0; heure++; } //Afficher le chrono dans un JLabel label.setText(heure+":"+minute+":"+seconde); } }; //Action et temps execution de la tache timer1=new Timer(delais,tache_timer); //Demarrer le chrono timer1.start(); } }Si je comprend tu veux dire tu essai d'afficher la dureé d'ouverture d'un fenetre dans la fenetre principale dans ce cas t'a juste a recupper l'heure systeme avant l'ouverture et apres l'ouverture,en faisant la difference tu as la durée que tu cherches si j'ai bien comprise veux un Timer en mode GRAPHIQUE qui m'affiche un chronomêtre qui indique la durée d'ouverture d'une fenêtre dans celle - ci même.![]()
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager