package com.github.pfichtner.jrunalyser.ui.cal.swing; import java.awt.BorderLayout; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.text.DateFormatSymbols; import java.util.Calendar; import java.util.Date; import javax.swing.BorderFactory; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingConstants; import javax.swing.border.Border; public class Chooser extends JPanel implements PropertyChangeListener { private static final long serialVersionUID = -1332243671366383016L; private JLabel prev; private JLabel next; private JLabel actual; private final Calendar calendar; public Chooser() { this(Calendar.getInstance()); } public Chooser(final Calendar calendar) { super(new BorderLayout()); this.calendar = calendar; Border border = BorderFactory.createEmptyBorder(5, 5, 5, 5); this.prev = new JLabel("<<"); //$NON-NLS-1$ this.prev.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { Date old = calendar.getTime(); calendar.add(Calendar.MONTH, -1); firePropertyChange("monthChanged", old, calendar.getTime()); //$NON-NLS-1$ } }); this.prev.setBorder(border); this.actual = new JLabel(); this.actual.setBorder(border); this.actual.setHorizontalAlignment(SwingConstants.CENTER); this.next = new JLabel(">>"); //$NON-NLS-1$ this.next.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { Date old = calendar.getTime(); calendar.add(Calendar.MONTH, +1); firePropertyChange("monthChanged", old, calendar.getTime()); //$NON-NLS-1$ } }); this.next.setBorder(border); add(this.prev, BorderLayout.WEST); add(this.actual, BorderLayout.CENTER); add(this.next, BorderLayout.EAST); } @Override public void propertyChange(PropertyChangeEvent evt) { if ("dateChanged".equals(evt.getPropertyName())) { //$NON-NLS-1$ this.calendar.setTime((Date) evt.getNewValue()); int i = this.calendar.get(Calendar.MONTH); int y = this.calendar.get(Calendar.YEAR); this.actual.setText(getMonthName(i) + " " + y); //$NON-NLS-1$ } } private String getMonthName(int i) { return DateFormatSymbols.getInstance().getMonths()[(12 + i) % 12]; } }