Calendar

ultrarich2001 Messages postés 72 Statut Membre -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,
j'aimerais changer la couleur de la date du jour en rouge dans mon calendrier
merci pour l'aide

1 réponse

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Ça dépend comment tu as fait ton calendrier...
    1
    1. ultrarich2001 Messages postés 72 Statut Membre
       
      je me perds dans le code qui permettra de le faire je sais que je dois mettre cela au niveau de l'affichage du calendrier .
      0
    2. ultrarich2001 Messages postés 72 Statut Membre
       
      Si tu as une idee je suis partant !!!!!! merci d'avance
      0
    3. KX Messages postés 19031 Statut Modérateur 3 020
       
      Exemple rapide :

      import java.awt.Color;
      import java.awt.GridLayout;
      
      import javax.swing.BorderFactory;
      import javax.swing.JFrame;
      import javax.swing.JLabel;
      
      public class Test
      {
          public static void main(String...args)
          {
              JFrame frame = new JFrame();
              frame.setLayout(new GridLayout(5,7));
              for (int i=1; i<=31; i++)
              {
                  JLabel label = new JLabel(String.valueOf(i));
                  if (i==16)
                      label.setForeground(Color.RED);
                  label.setBorder(BorderFactory.createLineBorder(Color.GRAY));
                  frame.add(label);
              }
              frame.pack();
              frame.setVisible(true);
              frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          }
      }

      Evidemment, dans cet exemple c'est très limité comme "calendrier".
      0
    4. ultrarich2001 Messages postés 72 Statut Membre
       
      Ok ,je vois le mieux voici mon code c'est un peut touffu

      package jcalendar;

      //@lola

      import java.awt.BorderLayout;
      import java.awt.Color;
      import java.awt.Dimension;
      import java.awt.GridLayout;
      import java.awt.event.ActionEvent;
      import java.awt.event.ActionListener;
      import java.sql.SQLException;
      import java.text.DateFormatSymbols;
      import java.text.SimpleDateFormat;
      import java.util.Calendar;
      import java.util.Date;
      import java.util.GregorianCalendar;
      import java.util.Locale;
      import javax.swing.*;
      import java.sql.*;
      import java.util.logging.Level;
      import java.util.logging.Logger;

      public class JCalendar extends JPanel {


      private Locale _locale = getDefaultLocale();

      private GregorianCalendar _calendar = new GregorianCalendar();

      private DateFormatSymbols _dateSymbols = new DateFormatSymbols();

      private SimpleDateFormat _formatMY = new SimpleDateFormat("MMMM yyyy");

      private int _firstDayOfWeek = _calendar.getFirstDayOfWeek();

      private final JLabel _monthYear = new JLabel("", SwingUtilities.CENTER);

      private final JLabel[] _daysOfWeek = new JLabel[7];

      private final JButton[] _daysNumber = new JButton[42];
      String[] s = {"Matin", "Soir"};
      public static String test1 = null ;

      test0 test2 = new test0();
      private final ActionListener _changeMonth = new ActionListener() {

      @Override
      public void actionPerformed(final ActionEvent ae) {

      final int nb = "next".equals(ae.getActionCommand()) ? 1: -1;
      _calendar.add(Calendar.MONTH, nb);
      updateMonthYear();
      updateDaysNumber();
      }
      };

      public JCalendar() {
      setLayout(new BorderLayout());
      // Month Panel
      final JPanel monthPanel = new JPanel();
      final JButton previous = new JButton("<<");
      previous.addActionListener(_changeMonth);
      final JButton next = new JButton(">>");
      next.addActionListener(_changeMonth);
      next.setActionCommand("next");
      _monthYear.setPreferredSize(new Dimension(320, 120));
      monthPanel.add(previous);
      monthPanel.add(_monthYear);
      monthPanel.add(next);
      add(monthPanel, BorderLayout.NORTH);



      // Day Panel

      final JPanel dayPanel = new JPanel();

      dayPanel.setLayout(new GridLayout(7, 7));
      for (int i = 0; i < 7; ++i)

      dayPanel.add(_daysOfWeek[i] = new JLabel(" ", SwingUtilities.CENTER));
      for (int i=0; i<_daysNumber.length; ++i)
      {

      //fenetre de confirmation du jour
      final int j = i;

      _daysNumber[i] = new JButton();

      _daysNumber[i].addActionListener(new ActionListener()
      {

      @Override
      public void actionPerformed(ActionEvent e)
      {


      test0.setTest(_daysNumber[j].getText()) ;
      System.out.println(test0.getTest());
      myconnection();



      }


      });
      dayPanel.add(_daysNumber[i]);



      }

      add(dayPanel, BorderLayout.CENTER);

      // Remplissage des composants
      updateMonthYear();
      updateDaysOfWeek();
      updateDaysNumber();
      }

      // Réactualise la locale et réaffiche le contenu des composants
      private void updateLocale(final Locale locale) {
      _locale = locale;
      final Date tmp = _calendar.getTime();
      _calendar = new GregorianCalendar(_locale);
      _calendar.setTime(tmp);
      _firstDayOfWeek = _calendar.getFirstDayOfWeek();
      _dateSymbols = new DateFormatSymbols(_locale);
      _formatMY = new SimpleDateFormat("MMMM yyyy", _locale);
      updateMonthYear();
      updateDaysOfWeek();
      updateDaysNumber();
      }

      // Affiche le mois et l'année en cours
      private void updateMonthYear() {
      _monthYear.setText(_formatMY.format(_calendar.getTime()));
      }

      // Affiche les jours de la semaine
      private void updateDaysOfWeek() {
      final String[] weekDays = _dateSymbols.getShortWeekdays();
      for (int i = 1; i < weekDays.length; ++i) {
      final int index = (i - 2 + _firstDayOfWeek) % 7 + 1;
      _daysOfWeek[i - 1].setText(weekDays[index]);
      }
      }

      // Affiche le numero des jours
      private void updateDaysNumber() {
      //apparition des marches dans le mois
      String var ="";
      int M1 = 2;
      int M2 = 3;
      int M3 = 4;
      int M4 = 6;

      final Date tmp = _calendar.getTime();
      _calendar.set(Calendar.DAY_OF_MONTH, 1);
      final int firstDay = _calendar.get(Calendar.DAY_OF_WEEK);
      final int LocalFirstDay = (firstDay - _firstDayOfWeek + 7) % 7 + 1;
      boolean full = false;
      for (int i = 0; i < _daysNumber.length; ++i) {

      //Determine si le composant est affiche ou non
      final boolean isNotEmpty = i < LocalFirstDay - 1 || full;
      _daysNumber[i].setVisible(!isNotEmpty);



      // Affichage du jour

      if (!isNotEmpty) {
      final int dayOfMonth = _calendar.get(Calendar.DAY_OF_MONTH);
      //apparitions et frequences des marches

      if (dayOfMonth == M1)
      {
      var = var +"A";
      M1 +=3;

      }
      if (dayOfMonth == M2)
      {
      var = var +"B";
      M2 +=4;
      }
      if (dayOfMonth == M3)
      {
      var = var + "C";
      M3 +=5;
      }
      if (dayOfMonth == M4)
      {
      var = var + "D";
      M4 +=7;//frequences ....
      }



      _daysNumber[i].setText(String.valueOf(dayOfMonth)+var);
      String f=var;
      var = "";//retourne vide apres chaque execution

      _calendar.add(Calendar.DAY_OF_MONTH, 1);
      full = 1 == _calendar.get(Calendar.DAY_OF_MONTH);

      }

      }
      _calendar.setTime(tmp);
      }



      public static void main(final String[] args)
      throws SQLException {


      SwingUtilities.invokeLater(new Runnable() {
      @Override
      public void run() {
      JFrame frame = new JFrame("I-ONE ");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(new JCalendar());
      frame.pack();
      frame.setVisible(true);

      }
      });
      }


      //connexion
      public void myconnection(){
      Connection con = null;
      String DB="med_consul"; // base de donnees
      String sql = null;
      Statement st=null;



      try {

      int n = JOptionPane.showOptionDialog(null, "Matin ou Soir ?", "Question", JOptionPane.YES_NO_OPTION,
      JOptionPane.QUESTION_MESSAGE, null, s, s[0]);
      if (n!=-1)
      {System.out.println(s[n]);
      test1 = s[n];

      }
      else
      System.out.println("Annulé");

      Class.forName ("com.mysql.jdbc.Driver");

      } catch (ClassNotFoundException ex) {
      Logger.getLogger(JCalendar.class.getName()).log(Level.SEVERE, null, ex);


      }
      try {
      con=DriverManager.getConnection("jdbc:mysql://localhost/med_consul","root","");


      //JOptionPane.showMessageDialog(null, "Votre choix est : ", test1, JOptionPane.INFORMATION_MESSAGE);

      }catch (SQLException ex) {

      Logger.getLogger(JCalendar.class.getName()).log(Level.SEVERE, null, ex);
      }

      try {
      // création d'un objet Statement
      st=con.createStatement();
      // exécution d'une requête select

      sql= "INSERT INTO 'rdv' (RDV,JourduMarche,Disponibilite) "+ "VALUES ('0','"+test0.getTest() +"','"+test1+"')";

      } catch (SQLException ex) {
      Logger.getLogger(JCalendar.class.getName()).log(Level.SEVERE, null, ex);
      }
      try {
      st.executeUpdate(sql);
      } catch (SQLException ex) {
      Logger.getLogger(JCalendar.class.getName()).log(Level.SEVERE, null, ex);
      }
      try {

      con.close();
      } catch (SQLException ex) {
      Logger.getLogger(JCalendar.class.getName()).log(Level.SEVERE, null, ex);


      System.out.println("Base " + DB + " fermée");
      }
      }
      }
      0
    5. KX Messages postés 19031 Statut Modérateur 3 020
       
      Alors c'est très moche, mais je crois que je te l'avais déjà dit dans un autre de tes messages (je ne sais plus), parce que tu ne sépares pas les données de l'affichage, tout est là, un peu en vrac, sans avoir vraiment de cohérence...

      Par exemple (parmi bien d'autres) tu as un JButton[] _daysNumber, alors que _daysNumber[n] ne correspond pas au jour "n" du mois affiché !

      Il serait plus logique de faire correspondre la date avec le bouton. D'ailleurs, mieux que les tableaux, tu as les Collection, tu pourrais par exemple utiliser une Map<Date,JButton> avec éventuellement une classe Date personnelle, qui prendrait en charge toutes les données que tu rajoutes au fur et à mesure (A, AB, etc.)

      Tu n'aurais alors qu'à faire comme ceci :
      daysNumber.get(tmp).setForeground(Color.Red);
      PS. En Java, on n'a jamais des noms de variables avec des tirets "_"
      La seule utilisation que l'on devrait en faire c'est pour séparer les mots des constantes comme dans "MAX_VALUE" par exemple...
      0