Un bouton start/stop sur un timer
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 :
Code:
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);
}
}
} |
Et là c'est la classe de mon TimerTask :
Code:
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
} |
Merci pour votre aide !
PS : l'ensemble des classes du petit programme sont là :
http://germain-vallverdu.ftp-developpez.com/Numerov.zip