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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
/****
* Classe DTimer :
gere un compteur de temps ainsi que l'affichage, utilisation du composant javax.swing.Timer
* qui genere un evenement tout les x temps d'intervalle ;
* solution qui est plus pratique qu'une classe qui herite de Thread ou implemente l'interface
* Runnable car ces deux dernieres solutions imposent un traitement graphique hors du processus
* d'evenement "the event-dispatching thread" ce qui est normalement deconseille pour ne par dire interdi
*
****/
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;
public class DTimer extends JFrame implements ActionListener
{
/****
* Attributs :
*
****/
protected JLabel viewTime; // composant permettant l'affichage du temps ecoule
protected int timeCount; // variable permettant de memoriser le temps ecoule
protected int t2=1; //minute
protected Timer timer; // objet javax.swing.Timer
/****
* Constructeur :
*
****/
// (par defaut) initialise le compteur a 0 et le delay a 1 seconde
public DTimer ()
{ this (0, 1000);
}
// construit un timer avec le temps initiale donnee et le delay a 1 seconde
public DTimer (int initialTime)
{ this (initialTime, 1000);
}
// construit un timer avec le temps et le delay donne
public DTimer (int initialTime, int delay)
{ super ("Demo chrono sans thread");
setFont(new Font("TimesRoman", Font.BOLD|Font.PLAIN,20));
this.viewTime = new JLabel ("0:0"+this.timeCount);
this.viewTime.setFont(new Font("TimesRoman", Font.BOLD|Font.PLAIN,30));
this.timer = new Timer (delay, this);
this.initGraphic ();
}
/****
* Methodes :
*
****/
// initialise la partie graphique de la demo
protected void initGraphic ()
{ JButton bouton = new JButton ("start/stop");
bouton.getColorModel();
bouton.setActionCommand ("Bouton");
bouton.addActionListener (this);
this.viewTime.setHorizontalAlignment (JLabel.CENTER);
this.getContentPane ().add (bouton, BorderLayout.SOUTH);
this.getContentPane ().add (this.viewTime, BorderLayout.CENTER);
this.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
this.setLocation (250, 250);
this.pack ();
this.setVisible (true);
}
// lance le compteur de temps
public void startDTimer ()
{ this.timer.start ();
}
// stop le compteur de temps
public void stopDTimer ()
{ this.timer.stop ();
}
public void restart()
{
}
// permet de recuperer le temps deja ecoule
public int getTime ()
{ return ( this.timeCount );
}
// permet de connaitre l'etat d'activite du timer (lance ou non)
public boolean isRunning ()
{ return ( this.timer.isRunning () );
}
/****
* Methode de l'interface ActionListener :
* necessaire pour l'object javax.swing.Timer
* methode appelle a intervalle de temps regulier par le timer
* (utilise egalement par le bouton pour stopper et lancer le timer
* la difference ce fait via l'instruction getActionCommand)
*
****/
public void actionPerformed (ActionEvent e)
{
// Cas d'un evenement genere par le bouton
if ( "Bouton".equals (e.getActionCommand ()) )
{ // le timer est en court d'execution donc on l'arrete
if ( this.isRunning () )
{ this.restart();
}
else // le timer est arrete donc on le lance ou relance
{ this.startDTimer ();
}
}
else // Cas d'un evenement genere par le composant javax.swing.Timer
{ this.timeCount++;
this.viewTime.setFont(new Font("TimesRoman", Font.BOLD|Font.PLAIN,30));
if (timeCount/(t2*60)<60)
if (timeCount%(t2*60)<10)
this.viewTime.setText (timeCount/60+":0"+this.timeCount%(t2*60));
else this.viewTime.setText (timeCount/60+":"+this.timeCount%(t2*60));
else{
t2++;
}
}}
public static void main (String argv [])
{ new DTimer ();
}
} |
Partager