package de.juwimm.cms.gui.controls; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.GridLayout; import java.awt.Insets; import java.util.Calendar; import java.util.Date; import java.util.Locale; import javax.swing.AbstractButton; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.plaf.basic.BasicButtonUI; import com.toedter.calendar.JCalendar; import com.toedter.calendar.JDayChooser; /** * @author <a href="florin.zalum@juwimm.com">Florin Zalum</a> * @version $Id */ public class CalendarChooser extends JCalendar{ private static final long serialVersionUID = -3814194514540073558L; public CalendarChooser(){ this(null, null, true, true); } public CalendarChooser(Date date, Locale locale, boolean monthSpinner, boolean weekOfYearVisible) { super(date, locale, monthSpinner, weekOfYearVisible); // needed for setFont() etc. remove(dayChooser); dayChooser = new DayChooser(weekOfYearVisible); dayChooser.addPropertyChangeListener(this); add(dayChooser, BorderLayout.CENTER); monthChooser.setDayChooser(dayChooser); yearChooser.setDayChooser(dayChooser); } } class DayChooser extends JDayChooser{ private static final long serialVersionUID = 8762184809200937023L; public DayChooser(boolean weekOfYearVisible){ setName("JDayChooser"); setBackground(Color.blue); this.weekOfYearVisible = weekOfYearVisible; locale = Locale.getDefault(); days = new JButton[49]; selectedDay = null; calendar = Calendar.getInstance(locale); today = (Calendar) calendar.clone(); setLayout(new BorderLayout()); dayPanel = new JPanel(); dayPanel.setLayout(new GridLayout(7, 7)); for (int y = 0; y < 7; y++) { for (int x = 0; x < 7; x++) { int index = x + (7 * y); if (y == 0) { days[index] = new PlainButton(PlainButtonType.Day); } else { days[index] = new PlainButton(PlainButtonType.SelectionDay); days[index].addActionListener(this); days[index].addKeyListener(this); days[index].addFocusListener(this); } days[index].setMargin(new Insets(2, 2, 2, 2)); dayPanel.add(days[index]); } } weekPanel = new JPanel(); weekPanel.setLayout(new GridLayout(7, 1)); weeks = new JButton[7]; for (int i = 0; i < 7; i++) { if(i ==0 ){ weeks[i] = new PlainButton(PlainButtonType.Day); }else{ weeks[i] = new PlainButton(PlainButtonType.Week); } weeks[i].setMargin(new Insets(2, 2, 2, 2)); weeks[i].setFocusPainted(false); weeks[i].setForeground(new Color(100, 100, 100)); if (i != 0) { weeks[i].setText("0" + (i + 1)); } weekPanel.add(weeks[i]); } Calendar tmpCalendar = Calendar.getInstance(); tmpCalendar.set(1, 0, 1, 1, 1); defaultMinSelectableDate = tmpCalendar.getTime(); minSelectableDate = defaultMinSelectableDate; tmpCalendar.set(9999, 0, 1, 1, 1); defaultMaxSelectableDate = tmpCalendar.getTime(); maxSelectableDate = defaultMaxSelectableDate; init(); setDay(Calendar.getInstance().get(Calendar.DAY_OF_MONTH)); add(dayPanel, BorderLayout.CENTER); if (weekOfYearVisible) { add(weekPanel, BorderLayout.WEST); } initialized = true; updateUI(); this.weekPanel.setOpaque(true); this.selectedColor = Color.white; this.dayPanel.setBackground(new Color(187,187,187)); this.decorationBackgroundColor = new Color(92, 92, 92); } @Override public void setDayBordersVisible(boolean dayBordersVisible) { } public void setFont(Font font) { if (days != null) { for (int i = 0; i < 49; i++) { days[i].setFont(font); } } Font newItalicButtonFont=new Font(font.getName(),Font.ITALIC,font.getSize()); if (weeks != null) { for (int i = 0; i < 7; i++) { weeks[i].setFont(newItalicButtonFont); } } } enum PlainButtonType { SelectionDay,Day,Week } class PlainButton extends JButton{ private static final long serialVersionUID = -7433645992591669725L; PlainButton(PlainButtonType type){ super(); this.setBorderPainted(false); switch(type){ case SelectionDay: this.ui = new PlainButtonUI(new Color(184,184,184),Color.white); break; case Day: this.ui = new PlainButtonUI(Color.white,null); break; case Week: this.setForeground(new Color(110,110,110)); this.ui = new PlainButtonUI(new Color(219,219,219),null); } } } class PlainButtonUI extends BasicButtonUI{ Color selectedColor = null; Color noSelectionColor = null; PlainButtonUI(Color noSelectionColor,Color selectedColor){ this.selectedColor=selectedColor; this.noSelectionColor=noSelectionColor; } @Override public void paint(Graphics g, JComponent c) { if (selectedColor != null && (selectedDay.equals(c) || ((JButton)c).getModel().isRollover())) { c.setBackground(selectedColor); }else{ c.setBackground(noSelectionColor); } super.paint(g, c); } @Override protected void paintButtonPressed(Graphics g, AbstractButton b) { if (selectedColor != null){ b.setBackground(selectedColor); }else{ b.setBackground(noSelectionColor); } super.paintButtonPressed(g, b); } } }