Package gui

Source Code of gui.DateCalendar

package gui;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.sql.Time;
import java.util.Calendar;
import java.util.Date;

import javax.swing.*;

import util.HourFilter;

/**
* DateCalendar : c'est une classe qui d�finit les composants du calendrier
* @author Kasandra
*
*/
public class DateCalendar implements ActionListener{

  private String[] mois = { "  janvier ", "  f�vrier ", "    mars  ", "   avril  ", "    mai   ", "    juin  ", "  juillet ", "    aout  ", " septembre", " octobre", " novembre", " decembre" };
  private int i, j, nbrJours;
  private int moisChoisi, jourChoisi;
  private Calendar dateChoisie, maintenant, mx;

  private JDialog aDialog;
  private JComboBox comboBoxAnnee, comboBoxMois;
  private JLabel[] tJours = new JLabel[31];
  private JPanel affJours;
  private boolean testFLAG;
  public boolean okFlag;
  JLabel labHrFin;
  JButton boutonOK, boutonAnnuler;
 
  private JTextField txtFilterHourFin;

  /**
   * <p>Mode: est un type �num�r�, il d�finit les diff�rents mode d'affichage d'une date</p>
   * <ul>
   * <li>HEURE_SEULEMENT : affiche l'heure seulement</li>
   * <li>DATE_SEULEMENT : affiche la date seulement</li> 
   * <li>DATE_ET_HEURE : affiche la date  et l'heure</li> 
   * </ul>
   * @author Kasandra
   *
   */ 
  public enum Mode {
    HEURE_SEULEMENT,
    DATE_SEULEMENT,
    DATE_ET_HEURE
  }
  final Mode mode;
 
    public JTextField getTxtFilterHourFin() {
    if (txtFilterHourFin == null) {
      txtFilterHourFin = new JTextField();
     
      txtFilterHourFin.setForeground(Color.blue);
      txtFilterHourFin.setDocument(new HourFilter());
    }
    return txtFilterHourFin;
  }

  /**
   * Constructeur Aucune condition sur la date choisie...
   * @param parentFrame TODO
   */
  public DateCalendar(JFrame parentFrame, DateCalendar.Mode mode) {
    this.mode = mode;
    aDialog = new JDialog((Frame)null, "---DATE---", true);
    aDialog.setBounds(550, 280, 300, 300);
    maintenant = Calendar.getInstance();
    dateChoisie = Calendar.getInstance();
    testFLAG = false;
    okFlag = false;
  }

  /**
   * Constructeur de la classe DateCalendar
   *
   * @param parentFrame TODO
   * @param delais
   *            Condition de validit� de la date porte sur un delais de x
   *            jours � partir de la date courante.
   *
   */
  public DateCalendar(JFrame parentFrame, int delais, DateCalendar.Mode mode) {
    this.mode = mode;
    aDialog = new JDialog(parentFrame, "DATE...", true);
    aDialog.setBounds(750, 370, 300, 300);
    maintenant = Calendar.getInstance();
    dateChoisie = Calendar.getInstance();
    testFLAG = true;
    MaxDelais(delais);
    okFlag = false;
  }

  /**
   * d�finit le d�lai maximum
   * @param delais
   */
  private void MaxDelais(int delais) {
    int jrMax;// Jour maximum sur le mois

    mx = Calendar.getInstance();

    jrMax = mx.getActualMaximum(Calendar.DATE);
    int crrAN = mx.get(Calendar.YEAR);
    int mxmois = mx.get(Calendar.MONTH);
    int jr = mx.get(Calendar.DATE);

    for (int cpt = 0; cpt < delais; cpt++) {
      if (jr > jrMax) {
        jr = 1;
        mxmois = mxmois + 1;

        if (mxmois > 11) {
          mxmois = 0;
          crrAN++;
        }

        mx.set(crrAN, mxmois, jr);
       
        jrMax = mx.getActualMaximum(Calendar.DATE);

      } else {
        jr++;
      }
    }

    mx.set(crrAN, mxmois, jr);
    mxmois = mx.get(Calendar.MONTH) + 1;
    String aSTR =  mx.get(Calendar.DATE)+ "-" + mxmois + "-" + mx.get(Calendar.YEAR) ;
    aDialog.setTitle("Limite: " + aSTR);

    System.out.println(aSTR.length());
    System.out.println(aSTR.indexOf("-"));
    System.out.println(aSTR.lastIndexOf("-"));
  }

  /**
   * Cr�e  le panel ann�e
   *
   * @return parameterPane
   */
  private JPanel creeAnneePanel() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setLayout(new GridLayout());
    int pos = 0;
    int cpt = 1940;

    comboBoxAnnee = new JComboBox();

    while (cpt < 2050) {

      comboBoxAnnee.addItem(Integer.toString(cpt));

      cpt = cpt + 1;

      if (maintenant.get(Calendar.YEAR) == cpt)
        pos = cpt - 1940;
    }
    comboBoxAnnee.setSelectedIndex(pos);
    parameterPane.add(comboBoxAnnee);

    return parameterPane;
  }

  /**
   * Cr�e le panel mois
   *
   * @return parameterPane
   */
  private JPanel creeMoisPanel() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setLayout(new GridLayout());

    comboBoxMois = new JComboBox(mois);

    comboBoxMois.setSelectedIndex(maintenant.get(Calendar.MONTH));
    moisChoisi = comboBoxMois.getSelectedIndex();

    parameterPane.add(comboBoxMois);

    return parameterPane;
  }

  /**
   * Cr�e le  panel jour
   *
   * @return parameterPane
   */
  private JPanel creeJoursPanel() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(300, 200));

    nbrJours = maintenant.getActualMaximum(Calendar.DAY_OF_MONTH);

    affJours = new JPanel();

    affJours.setLayout(new GridLayout(6, 6, 2, 2));

    for (i = 0; i < 31; i++) {
      tJours[i] = new JLabel(String.valueOf(i + 1));
      Font font = tJours[i].getFont();
      Font newFont = new Font(font.getFontName(),font.getStyle(),20);
      tJours[i].setFont(newFont);
      tJours[i].addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent me) {
          for (j = 0; j < nbrJours; j++) {
            tJours[j].setBackground(new Color(238,238,238));
            tJours[j].setOpaque(true);
          }


          JLabel jour = (JLabel) me.getSource();
          jourChoisi = Integer.parseInt(jour.getText());
         
          jour.setBackground(Color.red);
          jour.setOpaque(true);
          dateChoisie.set(Calendar.DATE, jourChoisi);
        }
      });

      if (i <= nbrJours) {
        affJours.add(tJours[i]);
      }
      ;
    }
    ;

    parameterPane.add(affJours);

    return affJours;
  }
 
  /**
   * Cr�e le panel heure
   *
   * @return parameterPane
   */
   private JPanel hrFinPane()
     {
             JPanel parameterPane = new JPanel(false);            
             parameterPane.setLayout(new GridLayout());
             parameterPane.setPreferredSize(new Dimension(100, 25));
            
             labHrFin = new JLabel("Heure :");           
             parameterPane.add(labHrFin);            
             parameterPane.add(getTxtFilterHourFin());
             return parameterPane;
     }
    

  /**
   * affiche les composants du calendrier
   */
  public void affiche() {
    JToolBar toolBar = new JToolBar("Outils...");

    boutonOK= new JButton("Ok");
    boutonAnnuler= new JButton("Annuler");
   
    JPanel tempsPanel = new JPanel(false);

    int dt = maintenant.get(Calendar.DAY_OF_MONTH) - 1;

    if ( mode != Mode.HEURE_SEULEMENT ) {
      JPanel parameterPane = new JPanel(false);
      parameterPane.setLayout(new FlowLayout());
      parameterPane.setPreferredSize(new Dimension(300, 300));
      parameterPane.add(creeJoursPanel());
      tJours[dt].setBackground(Color.RED);
      tJours[dt].setOpaque(true);
     
      aDialog.getContentPane().add(parameterPane);
      aDialog.getContentPane().add(toolBar, BorderLayout.PAGE_START);

      toolBar.add(creeMoisPanel());
      comboBoxMois.addItemListener(comboBoxItemListener);
      toolBar.add(creeAnneePanel());
    }
    if (mode != Mode.DATE_SEULEMENT) {
      tempsPanel.add(hrFinPane());
     
    }
    tempsPanel.add(boutonOK);
    tempsPanel.add(boutonAnnuler);
   
    aDialog.getContentPane().add(tempsPanel, BorderLayout.SOUTH);
   
    boutonOK.addActionListener(this);
    boutonAnnuler.addActionListener(this);
   
    aDialog.setVisible(true);
  }

  /**
   * v�rifie la validit� d'une date
   * @return true or false
   */
  private boolean DateValidite() {
    boolean returnValue = false;
    if (mode != Mode.HEURE_SEULEMENT) {
      Integer anChoisi = new Integer(comboBoxAnnee.getSelectedItem().toString());
      Integer msChoisi = new Integer(moisChoisi);
      Integer jrChoisi = new Integer(jourChoisi);

      if (anChoisi.intValue() <= mx.get(Calendar.YEAR)) {
        if (anChoisi.intValue() < mx.get(Calendar.YEAR)) {
          returnValue = true;
        } else {
          if (msChoisi.intValue() <= mx.get(Calendar.MONTH)) {
            if (msChoisi.intValue() < mx.get(Calendar.MONTH)) {
              returnValue = true;
            } else {
              if (jrChoisi.intValue() <= mx.get(Calendar.DATE))
                returnValue = true;
            }
          }
        }
      }
    } else {
      returnValue = true;
    }

    return returnValue;
  }

  /**
   * Renvoie la date valide
   *
   * @return
   */
  private boolean DateOK() {
    if (testFLAG)
      return DateValidite();
    else
      return true;
  }
 
  /**
   * retourne heure d'�cran
   * @return
   */
  public String RenvoiHrFin(){   
      return getTxtFilterHourFin().getText();
  }
 
  /**
   * retourne la date dans l'heure
   * @return
   */
  public Date retourDateSansTime() {
    Calendar cal = Calendar.getInstance();     
    cal.set(
        Integer.parseInt(comboBoxAnnee.getSelectedItem().toString()),
        moisChoisi,
        jourChoisi);
    return cal.getTime();
  }
 
 
  /**
   * retourne la date et l'heure
   * @return dateHeure
   *
   *
   */
 
 
  public Date retourDate() {
    Calendar cal = Calendar.getInstance();
   
     String heure= RenvoiHrFin();
         int tailleHeure= heure.length();
         int ps = heure.lastIndexOf(":");

        
        
    if (mode != Mode.DATE_SEULEMENT) {
      final int longueurHeureTexte = heure.length();
     
       int hr1= 0;
           int hr2= 0;
           int hr3= 0;
     
      if (longueurHeureTexte > 0) {
        hr1= Integer.parseInt(heure.substring(0,2));
      }
      cal.set(Calendar.HOUR_OF_DAY, hr1);
     
      if (longueurHeureTexte > 3) {
        hr2= Integer.parseInt(heure.substring(3,ps));
      }
      cal.set(Calendar.MINUTE, hr2);
     
      if (longueurHeureTexte > 6) {
         hr3= Integer.parseInt(heure.substring(ps+1,tailleHeure));
      }
      cal.set(Calendar.SECOND, hr3);
    }
   
    if (mode != Mode.HEURE_SEULEMENT) {
      cal.set(Calendar.YEAR, Integer.parseInt(comboBoxAnnee.getSelectedItem().toString()));
      cal.set(Calendar.MONTH, moisChoisi);
      cal.set(Calendar.DAY_OF_MONTH, jourChoisi);
    }

    return cal.getTime();
  }
 
 
  private ItemListener comboBoxItemListener = new ItemListener() {
    public void itemStateChanged(ItemEvent ev) {
      try {
        moisChoisi = comboBoxMois.getSelectedIndex();
 
        if (moisChoisi < maintenant.get(Calendar.MONTH)) {
          dateChoisie.add(Calendar.YEAR, 1);
        }
        ;
 
        dateChoisie.set(Calendar.MONTH, moisChoisi);
 
        nbrJours = dateChoisie.getActualMaximum(Calendar.DAY_OF_MONTH);
 
        affJours.removeAll();
 
        for (i = 0; i < nbrJours; i++) {
          tJours[i].setBackground(Color.white);
          affJours.add(tJours[i]);
        }
 
        tJours[dateChoisie.get(Calendar.DAY_OF_MONTH)].setBackground(Color.RED);
 
        tJours[dateChoisie.get(Calendar.DAY_OF_MONTH)].setOpaque(true);
 
        aDialog.repaint();
      }
 
      catch (Exception e) {
        System.out.println("Error in valueChanged Calendar" + e.getCause());
      }
    }
  };

  @Override
  public void actionPerformed(ActionEvent e) {
    if (e.getSource()==boutonAnnuler){
     
      aDialog.setVisible(false);
    }
    else if (e.getSource() == boutonOK){
      if (DateOK())
        okFlag = true;
      aDialog.setVisible(false);
    }
  }
}
TOP

Related Classes of gui.DateCalendar

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.