// FormTraversalHandler
package org.javamoney.examples.ez.money.gui.view.register;
import static org.javamoney.examples.ez.money.gui.view.register.FormButtonKeys.CANCEL;
import static org.javamoney.examples.ez.money.gui.view.register.FormButtonKeys.DATE_PICKER;
import static org.javamoney.examples.ez.money.gui.view.register.FormButtonKeys.ENTER;
import static org.javamoney.examples.ez.money.gui.view.register.FormButtonKeys.NEW;
import static org.javamoney.examples.ez.money.gui.view.register.FormButtonKeys.NEXT;
import static org.javamoney.examples.ez.money.gui.view.register.FormButtonKeys.PENDING;
import static org.javamoney.examples.ez.money.gui.view.register.FormButtonKeys.SPLIT;
import static org.javamoney.examples.ez.money.gui.view.register.FormFieldKeys.AMOUNT;
import static org.javamoney.examples.ez.money.gui.view.register.FormFieldKeys.CHECK_NUMBER;
import static org.javamoney.examples.ez.money.gui.view.register.FormFieldKeys.DATE;
import static org.javamoney.examples.ez.money.gui.view.register.FormFieldKeys.NOTES;
import java.awt.Component;
import java.awt.Container;
import java.awt.FocusTraversalPolicy;
import java.awt.Window;
import javax.swing.AbstractButton;
import javax.swing.JTextField;
/**
* This class facilitates traversing the form via the keyboard.
*/
final
class
FormTraversalHandler
extends FocusTraversalPolicy
{
/**
* This method returns the next component to receive focus.
*
* @param container The container the component belongs to.
* @param component The component that currently has the focus.
*
* @return The next component to receive focus.
*/
@Override
public
Component
getComponentAfter(Container container, Component component)
{
Component next = getButton(NEW);
if(component == getButton(CANCEL))
{
next = getButton(NEW);
}
else if(component == getButton(DATE_PICKER))
{
next = getForm().getPayFromChooser();
}
else if(component == getButton(ENTER))
{
next = getButton(CANCEL);
}
else if(component == getButton(NEW))
{
next = getField(CHECK_NUMBER);
}
else if(component == getButton(NEXT))
{
next = getField(DATE);
}
else if(component == getButton(SPLIT))
{
next = getButton(PENDING);
}
else if(component == getButton(PENDING))
{
next = getField(NOTES);
}
else if(component == getField(AMOUNT))
{
next = getForm().getPayToChooser();
}
else if(component == getField(CHECK_NUMBER))
{
next = getField(DATE);
}
else if(component == getField(DATE))
{
next = getForm().getPayFromChooser();
}
else if(component == getField(NOTES))
{
next = getButton(ENTER);
}
else if(component == getForm().getPayFromChooser().getTextField())
{
next = getField(AMOUNT);
}
else if(component == getForm().getPayToChooser())
{
next = getButton(SPLIT);
}
if(next.isEnabled() == false)
{
next = component;
}
return next;
}
/**
* This method returns the previous component to receive focus.
*
* @param container The container the component belongs to.
* @param component The component that currently has the focus.
*
* @return The previous component to receive focus.
*/
@Override
public
Component
getComponentBefore(Container container, Component component)
{
Component previous = getButton(ENTER);
if(component == getButton(CANCEL))
{
previous = getButton(ENTER);
}
else if(component == getButton(DATE_PICKER))
{
previous = getField(DATE);
}
else if(component == getButton(ENTER))
{
previous = getField(NOTES);
}
else if(component == getButton(NEW))
{
previous = getButton(CANCEL);
}
else if(component == getButton(NEXT))
{
previous = getField(CHECK_NUMBER);
}
else if(component == getButton(SPLIT))
{
previous = getForm().getPayToChooser();
}
else if(component == getButton(PENDING))
{
previous = getButton(SPLIT);
}
else if(component == getField(AMOUNT))
{
previous = getForm().getPayFromChooser();
}
else if(component == getField(CHECK_NUMBER))
{
previous = getButton(NEW);
}
else if(component == getField(DATE))
{
previous = getField(CHECK_NUMBER);
}
else if(component == getField(NOTES))
{
previous = getButton(PENDING);
}
else if(component == getForm().getPayFromChooser().getTextField())
{
previous = getField(DATE);
}
else if(component == getForm().getPayToChooser())
{
previous = getField(AMOUNT);
}
if(previous.isEnabled() == false)
{
previous = component;
}
return previous;
}
/**
* This method returns the default component to receive focus.
*
* @param container The container the component belongs to.
*
* @return The default component to receive focus.
*/
@Override
public
Component
getDefaultComponent(Container container)
{
return getButton(NEW);
}
/**
* This method returns the first component to receive focus.
*
* @param container The container the component belongs to.
*
* @return The first component to receive focus.
*/
@Override
public
Component
getFirstComponent(Container container)
{
return getButton(NEW);
}
/**
* This method returns the initial component to receive focus.
*
* @param window The window the container belongs to.
*
* @return The initial component to receive focus.
*/
@Override
public
Component
getInitialComponent(Window window)
{
return getButton(NEW);
}
/**
* This method returns the last component to receive focus.
*
* @param container The container the component belongs to.
*
* @return The last component to receive focus.
*/
@Override
public
Component
getLastComponent(Container container)
{
return getButton(CANCEL);
}
//////////////////////////////////////////////////////////////////////////////
// Start of protected methods.
//////////////////////////////////////////////////////////////////////////////
/**
* Constructs a new handler that will monitor the specified form.
*
* @param form The form to monitor.
*/
protected
FormTraversalHandler(Form form)
{
setForm(form);
getForm().setFocusCycleRoot(true);
getForm().setFocusTraversalPolicy(this);
}
//////////////////////////////////////////////////////////////////////////////
// Start of private methods.
//////////////////////////////////////////////////////////////////////////////
private
AbstractButton
getButton(FormButtonKeys key)
{
return getForm().getButton(key);
}
private
JTextField
getField(FormFieldKeys key)
{
return getForm().getField(key);
}
private
Form
getForm()
{
return itsForm;
}
private
void
setForm(Form form)
{
itsForm = form;
}
//////////////////////////////////////////////////////////////////////////////
// Start of class members.
//////////////////////////////////////////////////////////////////////////////
private Form itsForm;
}