Class CompoundFocusListener

java.lang.Object
org.jdesktop.beans.AbstractBean
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?
  • Field Details

    • root

      private JComponent root
      the root of the component hierarchy. PENDING JW: weak reference and auto-release listener?
    • managerListener

      private PropertyChangeListener managerListener
      PropertyChangeListener registered with the current keyboardFocusManager.
    • focused

      private boolean focused
  • Constructor Details

    • 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 Details

    • 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.

    • removeAllListeners

      private void removeAllListeners()
      Removes all property change listeners which are registered with this instance.
    • 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.
    • setFocused

      private void setFocused(boolean focused)
    • addManagerListener

      private void addManagerListener(KeyboardFocusManager manager)
      Adds all listeners to the given KeyboardFocusManager.

      Parameters:
      manager - the KeyboardFocusManager to add internal listeners to.
      See Also:
    • removeManagerListener

      private void removeManagerListener(KeyboardFocusManager manager)
      Removes all listeners this instance has installed from the given KeyboardFocusManager.

      Parameters:
      manager - the KeyboardFocusManager to remove internal listeners from.
      See Also:
    • getManagerListener

      private PropertyChangeListener getManagerListener()
      Lazily creates and returns a property change listener to be registered on the KeyboardFocusManager.
      Returns:
      a property change listener to be registered on the KeyboardFocusManager.