Package org.jdesktop.swingx.event
Class CompoundFocusListener
java.lang.Object
org.jdesktop.beans.AbstractBean
org.jdesktop.swingx.event.CompoundFocusListener
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 Summary
FieldsModifier and TypeFieldDescriptionprivate boolean
private PropertyChangeListener
PropertyChangeListener registered with the current keyboardFocusManager.private JComponent
the root of the component hierarchy. -
Constructor Summary
ConstructorsConstructorDescriptionInstantiates a CompoundFocusListener on the component hierarchy below the given component. -
Method Summary
Modifier and TypeMethodDescriptionprivate void
addManagerListener
(KeyboardFocusManager manager) Adds all listeners to the given KeyboardFocusManager.private PropertyChangeListener
Lazily creates and returns a property change listener to be registered on the KeyboardFocusManager.boolean
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.private void
Removes all property change listeners which are registered with this instance.private void
Removes all listeners this instance has installed from the given KeyboardFocusManager.private void
setFocused
(boolean focused) 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
-
Field Details
-
root
the root of the component hierarchy. PENDING JW: weak reference and auto-release listener? -
managerListener
PropertyChangeListener registered with the current keyboardFocusManager. -
focused
private boolean focused
-
-
Constructor Details
-
CompoundFocusListener
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
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
Adds all listeners to the given KeyboardFocusManager.- Parameters:
manager
- the KeyboardFocusManager to add internal listeners to.- See Also:
-
removeManagerListener
Removes all listeners this instance has installed from the given KeyboardFocusManager.- Parameters:
manager
- the KeyboardFocusManager to remove internal listeners from.- See Also:
-
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.
-