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 152 153 154 155 156 157 158 159
|
package horlogeprog;
public class horloge extends java.awt.Canvas implements Runnable{
private static final long serialVersionUID=0L;
private static int centreX;
private static int centreY;
private static int largeur;
private static int hauteur;
private static int Heures;
private static int Minutes;
private static int Secondes;
//éléments de l'interface graphique
private static javax.swing.JFrame FRAfen;
private static javax.swing.JPanel PANint;
private static javax.swing.JTextField JTFheure;
//éléments pour refresh des aiguilles
private java.text.SimpleDateFormat formadheure=new java.text.SimpleDateFormat();
private java.util.Calendar calendrier;
//Variables pour location de l'horloge sur le Canvas
private static int lastx=1;
private static int lasty=1;
public horloge(){
//Dessin de l'horloge dans une interface swing
interfaceprog();
//cadrage au centre
centreX=FRAfen.getWidth()/2;
centreY=FRAfen.getHeight()/2;
//mise en route du thread
new Thread(this, "Aiguilles").start();
//ajout des Listeners
this.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent e) {
if(e.getX()<=300&&e.getY()<=300){
setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
lastx=e.getX();
lasty=e.getY();} else{lastx=lasty=0;}
}
public void mouseReleased(java.awt.event.MouseEvent e){
if(e.getX()<=300&&e.getY()<=300)
setCursor(new java.awt.Cursor(java.awt.Cursor.MOVE_CURSOR));
else setCursor(new java.awt.Cursor(java.awt.Cursor.CROSSHAIR_CURSOR));
}
});
this.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
public void mouseDragged(java.awt.event.MouseEvent e) {
setLocation(getLocation().x+e.getX()-lastx,getLocation().y+e.getY()-lasty);
}
public void mouseMoved(java.awt.event.MouseEvent e) {
if(e.getX()<=300&&e.getY()<=300)
setCursor(new java.awt.Cursor(java.awt.Cursor.MOVE_CURSOR));
else setCursor(new java.awt.Cursor(java.awt.Cursor.CROSSHAIR_CURSOR));
}
});
}
//Implementation de Runnable
public void run() {
while(true){
//Obtention de la nouvelle date
calendrier = java.util.Calendar.getInstance();
//Mise à jour du contenu du text Field
java.util.Date dateactuelle=calendrier.getTime();
formadheure.applyPattern("EEEE dd MMMM yyyy hh:mm:ss");
JTFheure.setText(formadheure.format(dateactuelle));
//Repaint des aiguilles avec de nouvelles valeurs pour heure, minute et seconde
Secondes=calendrier.get(java.util.Calendar.SECOND);
Minutes=calendrier.get(java.util.Calendar.MINUTE);
Heures=calendrier.get(java.util.Calendar.HOUR);
repaint();
//sleep pour libérer CPU
try{Thread.sleep(1000);}catch(InterruptedException ex){ex.printStackTrace();}
}
}
private void interfaceprog(){
//FRAfen=FRAMEfenêtre
FRAfen=new javax.swing.JFrame("Horloge atomique faite maison :p :");
FRAfen.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
FRAfen.setSize(300,300);
FRAfen.setLocationByPlatform(true);
FRAfen.getToolkit().setDynamicLayout(true);
try {javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName());
javax.swing.SwingUtilities.updateComponentTreeUI(FRAfen);
} catch (Exception ex) {ex.printStackTrace();}
FRAfen.setCursor(new java.awt.Cursor(java.awt.Cursor.CROSSHAIR_CURSOR));
//PANint=PANEL intérieur fenêtre
PANint=new javax.swing.JPanel(new java.awt.BorderLayout());
//JTFheure=TEXTFIELD contenant la date et l'heure
JTFheure=new javax.swing.JTextField("Chargement en cours...");
JTFheure.setHorizontalAlignment(javax.swing.JTextField.CENTER);
JTFheure.setEnabled(false);
PANint.add(JTFheure, "North");
PANint.add(this, "Center");
FRAfen.add(PANint, "Center");
FRAfen.setVisible(true);
}
public void paint(java.awt.Graphics g){
cadran(g);
chiffres(g);
aiguilles(g);
}
public static void cadran(java.awt.Graphics g){
g.setColor(java.awt.Color.blue);
g.drawOval(centreX-95,centreY-95, 190, 190);//Cadran interne
g.drawOval(centreX-110, centreY-110, 220, 220);//Cadran externe
g.setColor(java.awt.Color.yellow);
for(int i=0;i<10;i++) //Motif du cadran
g.drawOval((centreX-100)-i, (centreY-100)+i, 200+2*i, 200-2*i);//Cadre fashion
g.setColor(java.awt.Color.black);
g.fillOval(centreX-5, centreY-5, 10, 10);//Centre aiguilles
}
public static void chiffres(java.awt.Graphics g){
//--------Minutes
g.drawString("60", centreX-5, centreY-100);
g.drawString("15", centreX+100-5, centreY);
g.drawString("30", centreX-7, centreY+110);
g.drawString("45", centreX-100-10, centreY);
//---------Heures
g.setColor(java.awt.Color.red);
g.setFont(new java.awt.Font("Comic sans ms", java.awt.Font.BOLD,15));
g.drawString("12", centreX-10, centreY-120);
g.drawString("3", centreX+120-5, centreY);
g.drawString("6", centreX-7, centreY+130);
g.drawString("9", centreX-120-10, centreY);
}
public static void aiguilles(java.awt.Graphics g){
//SECONDES//
g.setColor(java.awt.Color.black);
int xsecondes=(int)(110*(Math.sin((-(Secondes-30)*6*Math.PI)/180))+centreX);
int ysecondes=(int)(110*(Math.cos((-(Secondes-30)*6*Math.PI)/180))+centreX);
g.drawLine(centreX, centreY, xsecondes, ysecondes);
//MINUTES//
g.setColor(java.awt.Color.blue);
int xminutes=(int)(90*(Math.sin((-(Minutes-30)*6*Math.PI)/180))+centreX);
int yminutes=(int)(90*(Math.cos((-(Minutes-30)*6*Math.PI)/180))+centreX);
g.drawLine(centreX, centreY, xminutes, yminutes);
//HEURES//
g.setColor(java.awt.Color.red);
int xheures=(int)(70*(Math.sin((-(Heures-30)*30*Math.PI)/180))+centreX);
int yheures=(int)(70*(Math.cos((-(Heures-30)*30*Math.PI)/180))+centreX);
g.drawLine(centreX, centreY, xheures, yheures);
}
public static void main(String[]args){
new horloge();
}
} |
Partager