Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
- package disque;
- import java.awt.Color;
- import java.awt.Dimension;
- import java.awt.Graphics;
- import java.awt.Graphics2D;
- import java.awt.RenderingHints;
- import javax.swing.JPanel;
- /**
- *
- * @author laurillau
- */
- public class DisqueHoraire extends JPanel {
- private final String [] MOIS = { "Janvier", "Février", "Mars", "Avril",
- "Mai", "Juin", "Juillet", "Août",
- "Septembre", "Octobre", "Novembre",
- "Décembre" };
- private final int [] NB_JOURS = { 31, 28, 31, 30, 31, 30,
- 31, 31, 30, 31, 30, 31 };
- private static final int RAYON_JOUR = 50;
- private static final int RAYON_MOIS = RAYON_JOUR + 100;
- private static final int RAYON_HEURES = RAYON_MOIS + 100;
- private static final int RAYON_CONTOUR = RAYON_HEURES + 80;
- private static final int CENTRE_X = RAYON_CONTOUR + 20;
- private static final int CENTRE_Y = RAYON_CONTOUR + 20;
- private boolean bissextile = false;
- private int mois = 4, jour = 4, heure = 4, minutes = 4;
- private Circle c1;
- private Circle c2;
- private Circle c3;
- private Circle c4;
- public DisqueHoraire() {
- setBackground(Color.white);
- setDoubleBuffered(true);
- setPreferredSize(new Dimension(2 * CENTRE_X, 2 * CENTRE_Y));
- // Créer 4 objets Circle chargés de dessiner les cercles concentriques
- // A FAIRE
- c1 = new Circle(CENTRE_X,CENTRE_Y,RAYON_CONTOUR,Color.yellow);
- c2 = new Circle(CENTRE_X,CENTRE_Y,RAYON_HEURES,Color.green);
- c3 = new Circle(CENTRE_X,CENTRE_Y,RAYON_MOIS,Color.blue);
- c4 = new Circle(CENTRE_X,CENTRE_Y,RAYON_JOUR,Color.red);
- }
- public void paintComponent(Graphics g) {
- ((Graphics2D)g).setRenderingHint(RenderingHints.KEY_ANTIALIASING,
- RenderingHints.VALUE_ANTIALIAS_ON);
- // Dessiner le curseur
- afficherCurseur(g);
- c1.draw(g);
- c2.draw(g);
- c3.draw(g);
- c4.draw(g);
- // Dessiner les sections pour les mois
- afficherMois(g);
- // Dessiner les sections pour les jours
- afficherJours(g);
- // Dessiner les sections pour les heures
- afficherHeures(g);
- }
- private void afficherMois(Graphics g) {
- TextLabel label;
- int x1, y1, x2, y2;
- for(int i = 0; i < 12; i++) {
- // Calcul de l'angle en degré d'abord pour simplifier (mais non nécessaire)
- //
- // La méthode toRadians permet de convertir la valeur en degré
- // vers une valeur en radian, ce qui est nécessaire pour appliquer
- // les fonctions cosinus et sinus
- double angle = Math.toRadians((i * 360.0) / 12 + 360/24);
- // Dessiner les sections
- g.setColor(Color.BLACK);
- x1=(int)(CENTRE_X+RAYON_MOIS*Math.cos(angle));
- y1=(int)(CENTRE_Y+RAYON_MOIS*Math.sin(angle));
- x2=(int)(CENTRE_X+RAYON_HEURES*Math.cos(angle));
- y2=(int)(CENTRE_Y+RAYON_HEURES*Math.sin(angle));
- // A FAIRE
- g.drawLine(x1,y1,x2,y2);
- // Afficher les mois
- g.setColor(i == 0 ? Color.RED : Color.BLACK);
- // A FAIRe
- int m=(mois+i)/12;
- label = new TextLabel(MOIS[(mois+i)%12],x1,y1,angle);
- label.draw(g,m ,m);
- }
- }
- private void afficherJours(Graphics g) {
- // A FAIRE
- TextLabel label;
- int x1, y1, x2, y2;
- for(int i = 0; i < (mois==1&& bissextile ?NB_JOURS[(mois)]+1 : NB_JOURS[(mois)]); i++) {
- // Calcul de l'angle en degré d'abord pour simplifier (mais non nécessaire)
- //
- // La méthode toRadians permet de convertir la valeur en degré
- // vers une valeur en radian, ce qui est nécessaire pour appliquer
- // les fonctions cosinus et sinus
- double angle = Math.toRadians((i * 360.0) / (mois==1&& bissextile ?NB_JOURS[(mois)]+1 : NB_JOURS[(mois)]) + 360/60);
- // Dessiner les sections
- g.setColor(Color.BLACK);
- x1=(int)(CENTRE_X+RAYON_JOUR*Math.cos(angle));
- y1=(int)(CENTRE_Y+RAYON_JOUR*Math.sin(angle));
- x2=(int)(CENTRE_X+RAYON_MOIS*Math.cos(angle));
- y2=(int)(CENTRE_Y+RAYON_MOIS*Math.sin(angle));
- // A FAIRE
- g.drawLine(x1,y1,x2,y2);
- // Afficher les mois
- g.setColor(i == 0 ? Color.RED : Color.BLACK);
- // A FAIRe
- int m=(jour+i)/(mois==1&& bissextile ?NB_JOURS[(mois)]+1 : NB_JOURS[(mois)]);
- label = new TextLabel(" "+Integer.toString((jour+i)<=(mois==1&& bissextile ?NB_JOURS[(mois)]+1 : NB_JOURS[(mois)]) ?(jour+i):(jour+i)%((mois==1&& bissextile ?NB_JOURS[(mois)]+1 : NB_JOURS[(mois)]))),x1,y1,angle);
- label.draw(g,m ,m);
- }
- }
- private void afficherHeures(Graphics g) {
- TextLabel label;
- int x1, y1, x2, y2;
- String j;
- String h =String.valueOf(heure);
- for(int i = 0; i < 48; i++) {
- // Calcul de l'angle en degré d'abord pour simplifier (mais non nécessaire)
- //
- // La méthode toRadians permet de convertir la valeur en degré
- // vers une valeur en radian, ce qui est nécessaire pour appliquer
- // les fonctions cosinus et sinus
- double angle = Math.toRadians((i * 360.0) / 48 + 360/96);
- // Dessiner les sections
- g.setColor(Color.BLACK);
- x1=(int)(CENTRE_X+RAYON_HEURES*Math.cos(angle));
- y1=(int)(CENTRE_Y+RAYON_HEURES*Math.sin(angle));
- x2=(int)(CENTRE_X+RAYON_CONTOUR*Math.cos(angle));
- y2=(int)(CENTRE_Y+RAYON_CONTOUR*Math.sin(angle));
- // A FAIRE
- g.drawLine(x1,y1,x2,y2);
- // Afficher les mois
- g.setColor(i == 0 ? Color.RED : Color.BLACK);
- // A FAIRe
- int m=(heure+i)/48;
- if(minutes<30){
- j=(i%2==1 ? "30" : "00");
- }
- else{
- j=(i%2==1 ? "00" : "30");
- }
- label = new TextLabel(h+'h'+j,x1,y1,angle);
- label.draw(g,m ,m);
- if(minutes<30){
- h=(String.valueOf((heure+(i+1)/2)%24));
- }
- else{
- h=(String.valueOf((heure+1+i/2)%24));
- }
- }
- }
- private void afficherCurseur(Graphics g) {
- // Section pour les heures
- g.setColor(new Color(192,192,192,127));
- g.fillArc(20, 20,
- 2 * RAYON_CONTOUR,
- 2 * RAYON_CONTOUR,
- (int) (-360/48.0 - 3.75), (3 * 360) / 48);
- g.setColor(Color.WHITE);
- g.fillOval(20 + (RAYON_CONTOUR - RAYON_HEURES) ,
- 20 + (RAYON_CONTOUR - RAYON_HEURES),
- 2 * RAYON_HEURES,
- 2 * RAYON_HEURES);
- // Section pour le mois
- g.setColor(new Color(192,192,192,127));
- g.fillArc(20 + (RAYON_CONTOUR - RAYON_HEURES),
- 20 + (RAYON_CONTOUR - RAYON_HEURES),
- 2 * RAYON_HEURES,
- 2 * RAYON_HEURES, -15, 360/12);
- g.setColor(Color.WHITE);
- g.fillOval(20 + (RAYON_CONTOUR - RAYON_MOIS) ,
- 20 + (RAYON_CONTOUR - RAYON_MOIS),
- 2 * RAYON_MOIS,
- 2 * RAYON_MOIS);
- // Section pour le jour
- int nbJours = NB_JOURS[mois] + ((mois == 1) && bissextile ? 1 : 0);
- g.setColor(new Color(192,192,192,127));
- g.fillArc(20 + (RAYON_CONTOUR - RAYON_MOIS),
- 20 + (RAYON_CONTOUR - RAYON_MOIS),
- 2 * RAYON_MOIS,
- 2 * RAYON_MOIS, -180/nbJours, 360/nbJours);
- g.setColor(Color.WHITE);
- g.fillOval(20 + (RAYON_CONTOUR - RAYON_JOUR) ,
- 20 + (RAYON_CONTOUR - RAYON_JOUR),
- 2 * RAYON_JOUR,
- 2 * RAYON_JOUR);
- }
- public void setDate(int mois, int jour, int heure, int minutes, boolean bis) {
- this.mois = mois;
- this.jour = jour;
- this.heure = heure;
- this.minutes = minutes;
- this.bissextile = bis;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement