org.jdesktop.swingx.event
Class CompoundFocusListener

java.lang.Object
  extended by org.jdesktop.beans.AbstractBean
      extended by org.jdesktop.swingx.event.CompoundFocusListener

public class CompoundFocusListener
extends AbstractBean

An convenience class which maps focusEvents received from a container hierarchy to a bound read-only property. Registered PropertyChangeListeners are notified if the focus is transfered into/out of the hierarchy of a given root.

F.i, client code which wants to get notified if focus enters/exits the hierarchy below panel would install the compound focus listener like:

 
         // add some components inside
         panel.add(new JTextField("something to .... focus"));
         panel.add(new JXDatePicker(new Date()));
         JComboBox combo = new JComboBox(new Object[] {"dooooooooo", 1, 2, 3, 4 });
         combo.setEditable(true);
         panel.add(new JButton("something else to ... focus"));
         panel.add(combo);
         panel.setBorder(new TitledBorder("has focus dispatcher"));
         // register the compound dispatcher
         CompoundFocusListener report = new CompoundFocusListener(panel);
         PropertyChangeListener l = new PropertyChangeListener() {
 
             public void propertyChange(PropertyChangeEvent evt) {
                 // do something useful here
                 
             }};
         report.addPropertyChangeListener(l);    
         
 
 
PENDING JW: change of current instance of KeyboardFocusManager?


Constructor Summary
CompoundFocusListener(JComponent root)
          Instantiates a CompoundFocusListener on the component hierarchy below the given component.
 
Method Summary
 boolean isFocused()
          Return true if the root or any of its descendants is focused.
protected  void permanentFocusOwnerChanged(Component focusOwner)
          Updates focused property depending on whether or not the given component is below the root's hierarchy.
 void release()
          Releases all listeners and internal references.
 
Methods inherited from class org.jdesktop.beans.AbstractBean
addPropertyChangeListener, addPropertyChangeListener, addVetoableChangeListener, addVetoableChangeListener, clone, fireIndexedPropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, fireVetoableChange, getPropertyChangeListeners, getPropertyChangeListeners, getVetoableChangeListeners, getVetoableChangeListeners, hasPropertyChangeListeners, hasVetoableChangeListeners, removePropertyChangeListener, removePropertyChangeListener, removeVetoableChangeListener, removeVetoableChangeListener
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CompoundFocusListener

public CompoundFocusListener(JComponent root)
Instantiates a CompoundFocusListener on the component hierarchy below the given component.

Parameters:
root - the root of a component hierarchy
Throws:
NullPointerException - if the root is null
Method Detail

isFocused

public boolean isFocused()
Return true if the root or any of its descendants is focused. This is a read-only bound property, that is property change event is fired if focus is transfered into/out of root's hierarchy.

Returns:
a boolean indicating whether or not any component in the container hierarchy below root is permanent focus owner.

release

public void release()
Releases all listeners and internal references.

Note: this instance must not be used after calling this method.


permanentFocusOwnerChanged

protected void permanentFocusOwnerChanged(Component focusOwner)
Updates focused property depending on whether or not the given component is below the root's hierarchy.

Note: Does nothing if the component is null. This might not be entirely correct, but property change events from the focus manager come in pairs, with only one of the new/old value not-null.

Parameters:
focusOwner - the component with is the current focusOwner.