1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
| public class WeekPanel extends JPanel {
private final static Color COLOR_EVEN = new Color(111, 199, 227);
private final static Color COLOR_ODD = Color.WHITE;
private final static Color COLOR_SELECTION = Color.YELLOW;
private final Calendar calendar;
private JLabel[] labels;
private int selection;
private CalendarWeekViewer viewer;
private JPanel weekPanel;
public WeekPanel(CalendarWeekViewer viewer, Calendar calendar) {
this.viewer=viewer;
this.calendar = calendar;
selection = calendar.get(Calendar.WEEK_OF_YEAR);
setLayout(new BorderLayout());
int premiereSemaine = calendar.getMinimum(Calendar.WEEK_OF_YEAR);
int derniereSemaine = calendar.getMaximum(Calendar.WEEK_OF_YEAR);
labels=new JLabel[derniereSemaine-premiereSemaine+1];
weekPanel = new JPanel(new GridLayout(1, 0));
for (int i = premiereSemaine; i <= derniereSemaine; i++) {
JLabel label = new JLabel(getWeekLabel(i), JLabel.CENTER);
label.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5));
label.setOpaque(true);
labels[i-premiereSemaine]=label;
setLabelColor(i);
label.setEnabled(true);
final int week = i;
label.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
setSelection(week);
}
});
weekPanel.add(label);
}
JScrollPane slider = new JScrollPane(weekPanel,
JScrollPane.VERTICAL_SCROLLBAR_NEVER,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
add(slider, BorderLayout.CENTER);
}
private void setLabelColor(int week) {
int premiereSemaine = calendar.getMinimum(Calendar.WEEK_OF_YEAR);
JLabel label=labels[week-premiereSemaine];
if ( week==selection ) {
label.setBackground(COLOR_SELECTION);
}
else if (week % 2 == 0) {
label.setBackground(COLOR_ODD);
} else {
label.setBackground(COLOR_EVEN);
}
}
public void updateSelection() {
int premiereSemaine = calendar.getMinimum(Calendar.WEEK_OF_YEAR);
int oldSelection = selection;
selection = calendar.get(Calendar.WEEK_OF_YEAR);
setLabelColor(oldSelection);
setLabelColor(selection);
weekPanel.scrollRectToVisible(labels[selection-premiereSemaine].getBounds());
}
private void setSelection(int selection) {
int oldSelection = this.selection;
this.selection = selection;
setLabelColor(oldSelection);
setLabelColor(selection);
viewer.setWeek(selection);
}
private String getWeekLabel(int week) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(this.calendar.getTime());
calendar.set(Calendar.WEEK_OF_YEAR, week);
// le premier jour de cette semaine
Date premierJour = calendar.getTime();
int monthPremierJour = calendar.get(Calendar.MONTH);
// le dernier jour de cette semaine
calendar.add(Calendar.WEEK_OF_YEAR, 1);
calendar.add(Calendar.DAY_OF_WEEK, -1);
Date dernierJour = calendar.getTime();
int monthDernierJour = calendar.get(Calendar.MONTH);
return getWeekLabel(week, premierJour, dernierJour, monthPremierJour, monthDernierJour);
}
private final static DateFormat DATE_DEBUT_FORMAT = new SimpleDateFormat(
"dd");
private final static DateFormat DATE_FORMAT = new SimpleDateFormat(
"dd MMMM");
public static String getWeekLabel(int week, Date premierJour, Date dernierJour, int monthPremierJour, int monthDernierJour) {
String debut;
if (monthDernierJour == monthPremierJour) {
debut = DATE_DEBUT_FORMAT.format(premierJour);
} else {
debut = DATE_FORMAT.format(premierJour);
}
String milieu = DATE_FORMAT.format(dernierJour);
String fin = " (" + week + ")";
return debut + " - " + milieu + fin;
}
} |
Partager