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
|
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MenuHorloge extends JPanel
{
//private JLabel lJour = null;
//private JLabel lMois = null;
private int jour = 0;
private int mois = 0;
String tabMois[] = {"Janvier", "Février", "Mars", "Avril",
"Mai", "Juin", "Juillet", "Aout",
"Septembre", "Octobre", "Novembre", "Décembre"};
public MenuHorloge(Horloge tHorloge) {
this.setPreferredSize(new Dimension(150,250));
JLabel lJour= new JLabel("");
JLabel lMois= new JLabel("");
// Mise a jour du Jour
if(lJour != null)
lJour.setText(new Integer(jour).toString());
// Mise a jour du Mois
if(lMois != null)
lMois.setText(tabMois[mois]);
this.add(lJour);
this.add(lMois);
tHorloge.setJour(jour);
tHorloge.setMois(mois);
// Affecte le label au thread : pour le mettre a jour
tHorloge.setDayLabel(lJour);
tHorloge.setMonthLabel(lMois);
// Lancer le thread
tHorloge.start();
}
public static void main(String[] args)
{
JFrame frame = new JFrame("Thread Clock");
frame.setSize(500,400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Horloge h = new Horloge();
MenuHorloge mh = new MenuHorloge(h);
frame.getContentPane().add(mh);
frame.setVisible(true);
}
}
class Horloge extends Thread
{
private int jour;
private int mois;
private JLabel lJour = null;
private JLabel lMois = null;
// Référence sur jour et mois, afin de les récupérer dans MenuHorloge
public void setJour(int iJour) {
jour = iJour;
}
public void setMois(int iMois) {
mois = iMois;
}
public void setDayLabel(JLabel label)
{
lJour = label;
}
public void setMonthLabel(JLabel label)
{
lMois = label;
}
public void run ()
{
try
{
while (this.isAlive ())
{
jour++;
System.out.println("THREAD Horloge : " + jour + " " + MenuHorloge.tabMois[mois] );
if( mois == 11 && jour == 30)
{
mois = 0;
jour = 0;
System.out.println("bonne année");
}
if( jour == 30 )
{
mois = mois + 1 ;
jour =0 ;
}
/* Mise a jour de l'affichage
* la methode setText de la classe JLabel n'est pas Thread safe
* c'est a dire elle n'est pas compatible avec les threads.
* pour l'appeler, on procede comme suit:
*/
EventQueue.invokeLater(new Runnable(){
public void run()
{
lJour.setText(new Integer(jour).toString());
lMois.setText(MenuHorloge.tabMois[mois]);
}
});
Thread.sleep (500);
}
}
catch (InterruptedException e) { }
}
} |
Partager