JCalendar

ultrarich2001 -  
 ultrarich2001 -
Bonjour,
j'aimerais recuperer le nom du jour soit lundi ou mardi quand je selectionne un bouton du calendrier

3 réponses

  1. ultrarich2001
     
    je veux juste recuperer le nom du jour soit lundi ou mardi juste en cliquant sur le numero voici mon code

    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.text.DateFormatSymbols;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.GregorianCalendar;
    import java.util.Locale;
    import javax.swing.*;

    public class JCalendar extends JPanel implements ActionListener {

    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];

    private final ActionListener _changeMonth = new ActionListener() {
    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)
    dayPanel.add(_daysNumber[i] = new JButton());
    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 numéro 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) {
    //Détermine si le composant est affiché 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);
    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 ParseException {
    SwingUtilities.invokeLater(new Runnable() {
    @Override
    public void run() {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(new JCalendar());
    frame.pack();
    frame.setVisible(true);

    }
    });
    }

    @Override
    public void actionPerformed(ActionEvent e) {
    throw new UnsupportedOperationException("Not supported yet.");
    }
    }
    1
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      Très honnêtement, comment aurions nous pu deviner le problème de ton code sans l'avoir ?

      Une petite remarque : dans ton main, Runnable est une interface, donc l'annotation Override est fausse puisqu'il ne s'agit pas d'une surcharge (comme ça pourrait être le cas pour un Thread), il faut l'enlever. De plus actionPerformed n'a rien à faire là, ce n'est pas un ActionListener !

      Sinon pour récupérer le jour de la semaine, tu peux faire ça avec ton objet GregorianCalendar, en faisant un get(DAY_OF_WEEK). Voir java.util.Calendar
      0
    2. ultrarich2001
       
      je viens de faire ce ke tu m'as dit ,peut tu me help pour le code et je dois le mettre afin qu'en selectionnant le numero d'un jour je puisse recuperer son nom lundi ou mardi dans une autre fenetre ;voila ce ke je voudrais faire
      merci pour ta reponse
      0
    3. ultrarich2001
       
      Pense tu pas k'un code avec dayname me donnera en string lundi ? si oui aide pour le code
      0
    4. KX Messages postés 19031 Statut Modérateur 3 020
       
      La manière dont tu as fait tes boutons est très moche, puisque tu n'as encapsulé aucune information à l'intérieur, il faut donc jongler pour les retrouver... Je pense qu'il faudrait repenser la manière dont tu as fait toute ta classe !

      Alors je bricole un minimum, ça ne fera pas exactement ce que tu veux, mais en repensant ton code tu devrais y arriver...

      Vers la ligne 65, modifies ta boucle comme ceci :

      for (int i=0; i<_daysNumber.length; ++i)
      {
      	final int j = i;
      	_daysNumber[i] = new JButton();
      	_daysNumber[i].addActionListener(new ActionListener()
      	{
      		public void actionPerformed(ActionEvent e)
      		{
      			JOptionPane.showMessageDialog(null,_daysNumber[j].getText());
      		}
      	});
      	dayPanel.add(_daysNumber[i]);
      }

      Remarque : les noms de variables ne devraient JAMAIS commencer par un tiret _
      Celui-ci est réservé pour séparer les mots dans les noms de constante comme DAY_OF_WEEK
      0
    5. ultrarich2001
       
      je le fais ce soir et demain je te dis ce kil en aie ,donc ce code je pourrais récupérer mon lundi?
      0
  2. KX Messages postés 19031 Statut Modérateur 3 020
     
    JCalendar (ou jCalendar ?) n'est pas standard, ni en Java, ni en jQuery...

    Donc regarde la documentation de la bibliothèque Java ou du plugin jQuery que tu utilises, ou reportes toi à des outils standards comme Date Picker.
    0
  3. Utilisateur anonyme
     
    Salut!

    Essaie ceci:

    package hacktrack.jcalendar;
    
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.text.DateFormatSymbols;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.GregorianCalendar;
    import java.util.Locale;
    
    import javax.swing.AbstractAction;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
    
    public class JCalendar2 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];
    
    	private final ActionListener _changeMonth = new ActionListener() {
    		public void actionPerformed(final ActionEvent ae) {
    			final int nb = "next".equals(ae.getActionCommand()) ? 1 : -1;
    			_calendar.add(Calendar.MONTH, nb);
    			updateMonthYear();
    			updateDaysNumber();
    		}
    	};
    
    	public JCalendar2() {
    		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)
    			dayPanel.add(_daysNumber[i] = new JButton());
    		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 numéro 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) {
    			// Détermine si le composant est affiché 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 ....
    				}
    
    				Day day = new Day(_calendar.getTime());
    				_daysNumber[i].setAction(day);
    				_daysNumber[i].setText(day.toString());
    				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 class Day extends AbstractAction{
    		private String name;
    		private Date date;
    		
    		public Day(Date date){
    			this.date=date;
    			
    		}
    
    		@Override
    		public String toString() {
    			return new SimpleDateFormat("d").format(date);
    		}
    
    		@Override
    		public void actionPerformed(ActionEvent e) {
    			GregorianCalendar calendar = new GregorianCalendar();
    			calendar.setTime(date);
    			String dayName = calendar.getDisplayName(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.LONG, new Locale("fr"));
    			dayName=dayName.substring(0,1).toUpperCase()+dayName.substring(1);
    			JOptionPane.showMessageDialog(null,dayName);
    			
    		}
    	}
    
    	public static void main(final String[] args) throws ParseException {
    		SwingUtilities.invokeLater(new Runnable() {
    			@Override
    			public void run() {
    				JFrame frame = new JFrame();
    				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    				frame.getContentPane().add(new JCalendar2());
    				frame.pack();
    				frame.setVisible(true);
    
    			}
    		});
    	}
    
    }
    


    ;-)
    0
    1. ultrarich2001
       
      trop cool !! merci bocoup , j'ai aime ta reponse et cela marche maintenant il faut ke je connecte mon code java a ma base de donnee MySQL ,tu peux me help car depuis KX ne me repond plus .tu m'excuses bocoup mais la connection beugait grave
      0
    2. ultrarich2001
       
      je suis connecte
      0