// FormDateHandler
package org.javamoney.examples.ez.money.gui.view.register;
import static org.javamoney.examples.ez.common.utility.DateHelper.createCalendar;
import static java.awt.event.InputEvent.ALT_DOWN_MASK;
import static java.awt.event.InputEvent.SHIFT_DOWN_MASK;
import static java.awt.event.KeyEvent.VK_DOWN;
import static java.awt.event.KeyEvent.VK_UP;
import static java.util.Calendar.DAY_OF_MONTH;
import static java.util.Calendar.MONTH;
import static java.util.Calendar.YEAR;
import static org.javamoney.examples.ez.money.ApplicationProperties.UI_DATE_FORMAT;
import static org.javamoney.examples.ez.money.gui.view.register.FormFieldKeys.DATE;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.swing.JTextField;
/**
* This class facilitates managing the date in the form.
*/
final
class
FormDateHandler
{
/**
* Constructs a new handler that will monitor the specified form.
*
* @param form The form to monitor.
*/
protected
FormDateHandler(Form form)
{
// Add listeners.
form.getField(DATE).addFocusListener(new FocusHandler());
form.getField(DATE).addKeyListener(new KeyHandler());
}
//////////////////////////////////////////////////////////////////////////////
// Start of private methods.
//////////////////////////////////////////////////////////////////////////////
private
static
Date
getDate(JTextField field)
{
Date date = new Date();
try
{
date = UI_DATE_FORMAT.parse(field.getText());
}
catch(Exception exception)
{
// Ignored.
}
return date;
}
//////////////////////////////////////////////////////////////////////////////
// Start of inner classes.
//////////////////////////////////////////////////////////////////////////////
private
class
FocusHandler
implements FocusListener
{
public
void
focusGained(FocusEvent event)
{
// Ignored.
}
public
void
focusLost(FocusEvent event)
{
JTextField field = (JTextField)event.getSource();
field.setText(UI_DATE_FORMAT.format(getDate(field)));
}
}
private
class
KeyHandler
extends KeyAdapter
{
@Override
public
void
keyPressed(KeyEvent event)
{
JTextField field = (JTextField)event.getSource();
int key = event.getKeyCode();
if(key == VK_DOWN || key == VK_UP)
{
GregorianCalendar calendar = createCalendar(getDate(field));
int modifier = event.getModifiersEx();
int dateField = 0;
if(modifier == ALT_DOWN_MASK)
{
dateField = YEAR;
}
else if(modifier == SHIFT_DOWN_MASK)
{
dateField = MONTH;
}
else
{
dateField = DAY_OF_MONTH;
}
if(key == VK_UP)
{
calendar.set(dateField, calendar.get(dateField) + 1);
}
else
{
calendar.set(dateField, calendar.get(dateField) - 1);
}
field.setText(UI_DATE_FORMAT.format(calendar.getTime()));
}
}
}
}