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 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
| // appeler le fichier Exemple085_Chronometre_Echec.java
// le lundi 19 février 2007
// par Nicolas_75
// pour http://www.developpez.net/forums/showthread.php?t=281766
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
// le chronomètre lui-même :
class ChronometrePanel extends JPanel {
// valeur initiale du chronomètre (1 min 10 s) :
final public static int h_INITIAL = 0;
final public static int m_INITIAL = 1;
final public static int s_INITIAL = 10;
// rythme du chronomètre :
// (mettre 1000 pour un chronomètre temps réel battant la seconde)
final public static int DURATION_ONE_SECOND = 200;
// champs :
MainApplication mainApp; // référence sur l'application principale
JButton startButton = new JButton("Start");
JButton stopButton = new JButton("Stop");
int h; // heure affichée par le chronomètre
int m; // minute affichée par le chronomètre
int s; // seconde affichée par le chronomètre
JLabel chronoLabel = new JLabel(this.h+":"+this.m+":"+this.s);
java.util.Timer timer = null;
// constructeur :
public ChronometrePanel(MainApplication mainApp) {
// on garde une référence sur l'application principale :
this.mainApp = mainApp;
// mise en place de la fonctionnalité du
// bouton Start :
startButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
if (timer==null) { // si le chronomètre n'est pas encore en marche
// initialisation de l'affichage :
h = h_INITIAL;
m = m_INITIAL;
s = s_INITIAL;
// le texte en bas de l'application est écrit en noir :
ChronometrePanel.this.mainApp.setBlackColor();
// lancement du chronomètre :
timer = new java.util.Timer();
TimerTask tache = new TimerTask() {
public void run() {
decreaseOneSecond();
}
};
timer.schedule(tache, 0, DURATION_ONE_SECOND);
// en résumé, toutes les secondes,
// on appelle decreaseOneSecond()
}
}
} );
// mise en place de la fonctionnalité du
// bouton Suspend :
stopButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
if (timer!=null) { // si le chronomètre est en marche
timer.cancel(); // on l'arrête
timer = null;
}
}
});
// mise en place du JPanel :
this.setLayout(new GridLayout(1,4));
add(startButton);
add(stopButton);
add(new JLabel("")); // pour faire un peu d'espace
add(chronoLabel);
}
// méthode pour diminuer l'affichage d'une seconde :
public void decreaseOneSecond() {
this.s--;
if(this.s==-1) { this.s=59; this.m--; }
if(this.m==-1) { this.m=59; this.h--; }
if ((h==0)&&(m==0)&&(s==0)) { // le temps est écoulé
timer.cancel(); // on arrête le chronomètre
timer = null;
// on passe le texte de l'application principale en rouge :
mainApp.setRedColor();
}
// on modifie l'affichage :
chronoLabel.setText(this.h+":"+this.m+":"+this.s);
}
}
// application principale :
class MainApplication extends JFrame {
// couleur pour écrire le texte en base de la fenêtre :
// (sera modifiée plus tard)
private Color color = Color.BLACK;
// constructeur :
public MainApplication() {
// disposition de la fenêtre contenant l'application principale :
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(400, 100);
this.setLayout(new GridLayout(2,1));
// inclusion du chronomètre :
// (classe ci-dessus)
ChronometrePanel chronoPanel = new ChronometrePanel(this);
this.add(chronoPanel);
// création d'un autre JLabel montrant que
// l'application n'est pas bloquée :
JLabel notSuspended = new JLabel();
this.add(notSuspended);
// affichage de la fenêtre contenant l'application :
this.setVisible(true);
// pour montrer que l'application n'est pas gelée :
for (int i=0;;i++) {
if (i==10) i=0;
notSuspended.setForeground(this.color);
notSuspended.setText("et l'application continue ! ("+i+")");
try { Thread.sleep(300); } catch (Exception e) { e.printStackTrace(); }
}
}
public void setRedColor() {
this.color = Color.RED;
}
public void setBlackColor() {
this.color = Color.BLACK;
}
}
// lanceur :
public class Exemple085_Chronometre_Echec {
public static void main(String[] args) {
new MainApplication();
}
} |
Partager