IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Un bouton start/stop sur un timer


Sujet :

avec Java

  1. #1
    Membre éprouvé
    Avatar de Ladgalen
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2007
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 466
    Points : 982
    Points
    982
    Par défaut 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 : 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);
    		}	
    	}
    }
    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
     
    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

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 121
    Points : 136
    Points
    136
    Par défaut
    Dans ton cas tu peux simplement redémarrer MonScan dans un nouveau Timer.

    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
    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=null;
     
    	ActionScan(Commune commun, FenetrePrincipale principale, TracerPsi panneau) {
    		this.commun = commun;
    		this.principale = principale;
    		this.panneau = panneau;
    	}
     
    	public void actionPerformed(ActionEvent event) {
    		if (timer == null) {
    			timer = new Timer();
    		    timer.schedule(new MonScan(commun, principale, panneau, timer), 0, 100);			
    		} else {
    			timer.cancel();
    			timer=null;
    		}	
    	}
    }

  3. #3
    Membre éprouvé
    Avatar de Ladgalen
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2007
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 466
    Points : 982
    Points
    982
    Par défaut
    Nickel !

    Ca fait exactement ce que je voulais. Merci à toi !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Fusionner bouton Start et STOP d'un chronomètre
    Par tibs1502 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/03/2013, 17h57
  2. [Lazarus] Boutons Start et Stop
    Par Aleph69 dans le forum Lazarus
    Réponses: 2
    Dernier message: 30/03/2012, 12h33
  3. bouton start/stop animation
    Par mackab dans le forum Flash
    Réponses: 1
    Dernier message: 20/07/2007, 13h07
  4. Bouton start et stop
    Par ditoni mapemba dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 08/01/2007, 16h07
  5. boutons avec images sur un menu
    Par ENDAMA NDONG dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 23/11/2005, 12h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo