// YearChooser
package org.javamoney.examples.ez.money.gui.chooser;
import static org.javamoney.examples.ez.common.utility.ButtonHelper.buildButton;
import static org.javamoney.examples.ez.money.IconKeys.ARROW_BACK;
import static org.javamoney.examples.ez.money.IconKeys.ARROW_FORWARD;
import java.awt.GridBagConstraints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.swing.Icon;
import javax.swing.JLabel;
import javax.swing.JToolBar;
import org.javamoney.examples.ez.common.gui.Link;
import org.javamoney.examples.ez.common.gui.Panel;
import org.javamoney.examples.ez.common.utility.ActionSignaler;
import org.javamoney.examples.ez.common.utility.I18NHelper;
/**
* This class facilitates choosing a year.
*/
public
final
class
YearChooser
extends Panel
{
/**
* Constructs a new chooser with the current year initially selected.
*/
public
YearChooser()
{
this(new GregorianCalendar().get(Calendar.YEAR));
}
/**
* Constructs a new chooser with the year initially selected.
*
* @param year The year to initially select.
*/
public
YearChooser(int year)
{
setActionSignaler(new ActionSignaler());
setLabel(new JLabel());
setSelectedYear(year);
// Build panel.
setAnchor(GridBagConstraints.EAST);
add(createButton(ACTION_PREVIOUS, ARROW_BACK.getIcon(),
getProperty("tip_previous")), 0, 0, 1, 1, 50, 100);
setAnchor(GridBagConstraints.CENTER);
addEmptyCellAt(1, 0);
add(getLabel(), 2, 0, 1, 1, 0, 0);
addEmptyCellAt(3, 0);
setAnchor(GridBagConstraints.WEST);
add(createButton(ACTION_NEXT, ARROW_FORWARD.getIcon(),
getProperty("tip_next")), 4, 0, 1, 1, 50, 0);
}
/**
* This method adds the action listener to the chooser.
*
* @param listener The action listener to add.
*/
public
void
addActionListener(ActionListener listener)
{
getActionSignaler().addListener(listener);
}
/**
* This method returns the current year.
*
* @return The current year.
*/
public
int
getSelectedYear()
{
return itsYear;
}
/**
* This method sets and displays the selected year. Invoking this method will
* trigger an action event.
*
* @param year The selected year.
*/
public
void
setSelectedYear(int year)
{
itsYear = constrainYear(year);
getLabel().setText("" + getSelectedYear());
getActionSignaler().sendSignal(this, "" + getSelectedYear());
}
//////////////////////////////////////////////////////////////////////////////
// Start of private methods.
//////////////////////////////////////////////////////////////////////////////
private
static
int
constrainYear(int year)
{
if(year < MIN_YEAR)
{
year = MIN_YEAR;
}
else if(year > MAX_YEAR)
{
year = MAX_YEAR;
}
return year;
}
private
JToolBar
createButton(String command, Icon icon, String tip)
{
JToolBar toolBar = new JToolBar();
Link link = new Link();
// Build link.
buildButton(link, icon, new ActionHandler(), command, tip);
// Build tool bar.
toolBar.add(link);
toolBar.setBorderPainted(false);
toolBar.setFloatable(false);
toolBar.setRollover(true);
return toolBar;
}
private
ActionSignaler
getActionSignaler()
{
return itsActionSignaler;
}
private
JLabel
getLabel()
{
return itsLabel;
}
private
static
String
getProperty(String key)
{
return I18NHelper.getProperty("YearChooser." + key);
}
private
void
setActionSignaler(ActionSignaler signaler)
{
itsActionSignaler = signaler;
}
private
void
setLabel(JLabel label)
{
itsLabel = label;
}
//////////////////////////////////////////////////////////////////////////////
// Start of inner classes.
//////////////////////////////////////////////////////////////////////////////
private
class
ActionHandler
implements ActionListener
{
public
void
actionPerformed(ActionEvent event)
{
if(event.getActionCommand().equals(ACTION_NEXT) == true)
{
setSelectedYear(getSelectedYear() + 1);
}
else
{
setSelectedYear(getSelectedYear() - 1);
}
}
}
//////////////////////////////////////////////////////////////////////////////
// Start of class members.
//////////////////////////////////////////////////////////////////////////////
private ActionSignaler itsActionSignaler;
private JLabel itsLabel;
private int itsYear;
private static final String ACTION_NEXT = "Next";
private static final String ACTION_PREVIOUS = "Previous";
/**
* The maximum year the chooser can display.
*/
public static final int MAX_YEAR = 9999;
/**
* The minimum year the chooser can display.
*/
public static final int MIN_YEAR = 1900;
}