- 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.JButton;
- import javax.swing.JFrame;
- import javax.swing.JLabel;
- import javax.swing.JPanel;
- import javax.swing.SwingUtilities;
-
-
- 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];
-
- 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(120, 20));
- 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() {
- 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);
- _daysNumber[i].setText(String.valueOf(dayOfMonth));
- _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() {
- public void run() {
- final JFrame frame = new JFrame();
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- frame.getContentPane().add(new JCalendar());
- frame.pack();
- frame.setVisible(true);
- }
- });
- }
- }
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.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
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];
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(120, 20));
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() {
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);
_daysNumber[i].setText(String.valueOf(dayOfMonth));
_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() {
public void run() {
final JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new JCalendar());
frame.pack();
frame.setVisible(true);
}
});
}
}