Bonjour
Comme dis dans le titre, j'aimerais avoir un bouton qui démarre et arrete un timer.
En fait j'ai une valeur E (double), je démarre un scan de E dans une gamme de valeur. Le timer stoppe lorsque E atteint sa valeur max. En fait je voudrais pouvoir arréter et faire redémarer le timer en appuyant sur le même bouton.
J'avais pensé au fonction wait() et notify() pour faire arréter redémarer mais je n'y arrive pas. Voici la classe actionListener associée au bouton. J'ai utilisé un entier, testscan, qui est dans la classe commun dans laquelle je stocke pleins de trucs, pour savoir si le scan a démarré ou non :
Et là c'est la classe de mon TimerTask :
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 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Timer; public class ActionScan implements ActionListener { Commune commun; FenetrePrincipale principale; TracerPsi panneau; Timer timer = new Timer(); ActionScan(Commune commun, FenetrePrincipale principale, TracerPsi panneau) { this.commun = commun; this.principale = principale; this.panneau = panneau; } public void actionPerformed(ActionEvent event) { if ( commun.get_testscan() == 0 ) { commun.set_testscan(1); timer.schedule(new MonScan(commun, principale, panneau, timer), 0, 100); } else if (commun.get_testscan() == 1 ){ try { timer.wait(0); } catch (InterruptedException e) { System.out.println("wait du timer"); } commun.set_testscan(2); } else if (commun.get_testscan() == 2 ) { timer.notify(); commun.set_testscan(1); } } }
Merci pour votre aide !
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 import java.util.TimerTask; import java.util.Timer; public class MonScan extends TimerTask { Commune commun; FenetrePrincipale principale; TracerPsi panneau; Timer timer; MonScan(Commune commun, FenetrePrincipale principale, TracerPsi panneau, Timer timer) { this.commun = commun; this.principale = principale; this.panneau = panneau; this.timer = timer; } public void run() { double valE = commun.get_E(); double incrementE = Double.parseDouble(principale.champdeltaE.getText() ); if ( valE < 18.0 ) { valE = valE + incrementE; commun.set_E(valE); principale.champvaleurE.setText( String.format("%11.8g", commun.get_E() ) ); principale.principal.add("Center", panneau ); principale.repaint(); } else { timer.cancel(); } } // fin de la partie exécutable }
PS : l'ensemble des classes du petit programme sont là :
http://germain-vallverdu.ftp-developpez.com/Numerov.zip
Partager