FileDocCategorySizeDatePackage
LayoutFocusTraversalPolicy.javaAPI DocJava SE 5 API10791Fri Aug 26 14:57:58 BST 2005javax.swing

LayoutFocusTraversalPolicy

public class LayoutFocusTraversalPolicy extends SortingFocusTraversalPolicy implements Serializable
A SortingFocusTraversalPolicy which sorts Components based on their size, position, and orientation. Based on their size and position, Components are roughly categorized into rows and columns. For a Container with horizontal orientation, columns run left-to-right or right-to-left, and rows run top- to-bottom. For a Container with vertical orientation, columns run top-to- bottom and rows run left-to-right or right-to-left. See ComponentOrientation for more information. All columns in a row are fully traversed before proceeding to the next row.
version
1.10, 12/19/03
author
David Mendenhall
see
java.awt.ComponentOrientation
since
1.4

Fields Summary
private static final SwingDefaultFocusTraversalPolicy
fitnessTestPolicy
Constructors Summary
public LayoutFocusTraversalPolicy()
Constructs a LayoutFocusTraversalPolicy.


            
      
	super(new LayoutComparator());
    
LayoutFocusTraversalPolicy(Comparator c)
Constructs a LayoutFocusTraversalPolicy with the passed in Comparator.

	super(c);
    
Methods Summary
protected booleanaccept(java.awt.Component aComponent)
Determines whether the specified Component is an acceptable choice as the new focus owner. This method performs the following sequence of operations:
  1. Checks whether aComponent is visible, displayable, enabled, and focusable. If any of these properties is false, this method returns false.
  2. If aComponent is an instance of JTable, returns true.
  3. If aComponent is an instance of JComboBox, then returns the value of aComponent.getUI().isFocusTraversable(aComponent).
  4. If aComponent is a JComponent with a JComponent.WHEN_FOCUSED InputMap that is neither null nor empty, returns true.
  5. Returns the value of DefaultFocusTraversalPolicy.accept(aComponent).

param
aComponent the Component whose fitness as a focus owner is to be tested
see
java.awt.Component#isVisible
see
java.awt.Component#isDisplayable
see
java.awt.Component#isEnabled
see
java.awt.Component#isFocusable
see
javax.swing.plaf.ComboBoxUI#isFocusTraversable
see
javax.swing.JComponent#getInputMap
see
java.awt.DefaultFocusTraversalPolicy#accept
return
true if aComponent is a valid choice for a focus owner; otherwise false

	if (!super.accept(aComponent)) {
	    return false;
	} else if (aComponent instanceof JTable) {
            // JTable only has ancestor focus bindings, we thus force it
            // to be focusable by returning true here.
	    return true;
	} else if (aComponent instanceof JComboBox) {
	    JComboBox box = (JComboBox)aComponent;
	    return box.getUI().isFocusTraversable(box);
	} else if (aComponent instanceof JComponent) {
	    JComponent jComponent = (JComponent)aComponent;
	    InputMap inputMap = jComponent.getInputMap(JComponent.WHEN_FOCUSED,
						       false);
	    while (inputMap != null && inputMap.size() == 0) {
		inputMap = inputMap.getParent();
	    }
            if (inputMap != null) {
                return true;
            }
            // Delegate to the fitnessTestPolicy, this will test for the
            // case where the developer has overriden isFocusTraversable to
            // return true.
        }
        return fitnessTestPolicy.accept(aComponent);
    
public java.awt.ComponentgetComponentAfter(java.awt.Container aContainer, java.awt.Component aComponent)
Returns the Component that should receive the focus after aComponent. aContainer must be a focus cycle root of aComponent.

By default, LayoutFocusTraversalPolicy implicitly transfers focus down- cycle. That is, during normal focus traversal, the Component traversed after a focus cycle root will be the focus-cycle-root's default Component to focus. This behavior can be disabled using the setImplicitDownCycleTraversal method.

If aContainer is focus traversal policy provider, the focus is always transferred down-cycle.

param
aContainer a focus cycle root of aComponent or a focus traversal policy provider
param
aComponent a (possibly indirect) child of aContainer, or aContainer itself
return
the Component that should receive the focus after aComponent, or null if no suitable Component can be found
throws
IllegalArgumentException if aContainer is not a focus cycle root of aComponent or a focus traversal policy provider, or if either aContainer or aComponent is null

        if (aContainer == null || aComponent == null) {
            throw new IllegalArgumentException("aContainer and aComponent cannot be null");
        }
	Comparator comparator = getComparator();
	if (comparator instanceof LayoutComparator) {
	    ((LayoutComparator)comparator).
                setComponentOrientation(aContainer.
					getComponentOrientation());
	}
        return super.getComponentAfter(aContainer, aComponent);
    
public java.awt.ComponentgetComponentBefore(java.awt.Container aContainer, java.awt.Component aComponent)
Returns the Component that should receive the focus before aComponent. aContainer must be a focus cycle root of aComponent.

By default, LayoutFocusTraversalPolicy implicitly transfers focus down- cycle. That is, during normal focus traversal, the Component traversed after a focus cycle root will be the focus-cycle-root's default Component to focus. This behavior can be disabled using the setImplicitDownCycleTraversal method.

If aContainer is focus traversal policy provider, the focus is always transferred down-cycle.

param
aContainer a focus cycle root of aComponent or a focus traversal policy provider
param
aComponent a (possibly indirect) child of aContainer, or aContainer itself
return
the Component that should receive the focus before aComponent, or null if no suitable Component can be found
throws
IllegalArgumentException if aContainer is not a focus cycle root of aComponent or a focus traversal policy provider, or if either aContainer or aComponent is null

        if (aContainer == null || aComponent == null) {
            throw new IllegalArgumentException("aContainer and aComponent cannot be null");
        }
	Comparator comparator = getComparator();
	if (comparator instanceof LayoutComparator) {
	    ((LayoutComparator)comparator).
                setComponentOrientation(aContainer.
					getComponentOrientation());
	}
        return super.getComponentBefore(aContainer, aComponent);
    
public java.awt.ComponentgetFirstComponent(java.awt.Container aContainer)
Returns the first Component in the traversal cycle. This method is used to determine the next Component to focus when traversal wraps in the forward direction.

param
aContainer a focus cycle root of aComponent or a focus traversal policy provider whose first Component is to be returned
return
the first Component in the traversal cycle of aContainer, or null if no suitable Component can be found
throws
IllegalArgumentException if aContainer is null

        if (aContainer == null) {
            throw new IllegalArgumentException("aContainer cannot be null");
        }
	Comparator comparator = getComparator();
	if (comparator instanceof LayoutComparator) {
	    ((LayoutComparator)comparator).
                setComponentOrientation(aContainer.
					getComponentOrientation());
	}
        return super.getFirstComponent(aContainer);
    
public java.awt.ComponentgetLastComponent(java.awt.Container aContainer)
Returns the last Component in the traversal cycle. This method is used to determine the next Component to focus when traversal wraps in the reverse direction.

param
aContainer a focus cycle root of aComponent or a focus traversal policy provider whose last Component is to be returned
return
the last Component in the traversal cycle of aContainer, or null if no suitable Component can be found
throws
IllegalArgumentException if aContainer is null

        if (aContainer == null) {
            throw new IllegalArgumentException("aContainer cannot be null");
        }
	Comparator comparator = getComparator();
	if (comparator instanceof LayoutComparator) {
	    ((LayoutComparator)comparator).
                setComponentOrientation(aContainer.
					getComponentOrientation());
	}
        return super.getLastComponent(aContainer);
    
private voidreadObject(java.io.ObjectInputStream in)

	setComparator((Comparator)in.readObject());
	setImplicitDownCycleTraversal(in.readBoolean());
    
private voidwriteObject(java.io.ObjectOutputStream out)

	out.writeObject(getComparator());
	out.writeBoolean(getImplicitDownCycleTraversal());