JCalendar

Fermé
ultrarich2001 - 24 juil. 2012 à 17:32
 ultrarich2001 - 30 juil. 2012 à 10:05
Bonjour,
j'aimerais recuperer le nom du jour soit lundi ou mardi quand je selectionne un bouton du calendrier


3 réponses

ultrarich2001
24 juil. 2012 à 17:47
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
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
24 juil. 2012 à 18:01
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
ultrarich2001
24 juil. 2012 à 18:11
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
ultrarich2001
24 juil. 2012 à 18:14
Pense tu pas k'un code avec dayname me donnera en string lundi ? si oui aide pour le code
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
24 juil. 2012 à 18:37
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
ultrarich2001
24 juil. 2012 à 19:04
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
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
24 juil. 2012 à 17:43
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
Utilisateur anonyme
28 juil. 2012 à 16:33
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
ultrarich2001
30 juil. 2012 à 10:02
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
ultrarich2001
30 juil. 2012 à 10:05
je suis connecte
0