e609. Listening to All Focus Changes Between Components in an Application
To listen to focus change events between components, install a listener with the keyboard focus manager. If you need the ability to veto (reject) a focus change, install a vetoable listener with the keyboard focus manager.
KeyboardFocusManager.getCurrentKeyboardFocusManager() .addPropertyChangeListener(new FocusChangeListener()); KeyboardFocusManager.getCurrentKeyboardFocusManager() .addVetoableChangeListener(new FocusVetoableChangeListener()); class FocusChangeListener implements PropertyChangeListener { public void propertyChange(PropertyChangeEvent evt) { Component oldComp = (Component)evt.getOldValue(); Component newComp = (Component)evt.getNewValue(); if ("focusOwner".equals(evt.getPropertyName())) { if (oldComp == null) { // the newComp component gained the focus } else { // the oldComp component lost the focus } } else if ("focusedWindow".equals(evt.getPropertyName())) { if (oldComp == null) { // the newComp window gained the focus } else { // the oldComp window lost the focus } } } } class FocusVetoableChangeListener implements VetoableChangeListener { public void vetoableChange(PropertyChangeEvent evt) throws PropertyVetoException { Component oldComp = (Component)evt.getOldValue(); Component newComp = (Component)evt.getNewValue(); if ("focusOwner".equals(evt.getPropertyName())) { if (oldComp == null) { // the newComp component will gain the focus } else { // the oldComp component will lose the focus } } else if ("focusedWindow".equals(evt.getPropertyName())) { if (oldComp == null) { // the newComp window will gain the focus } else { // the oldComp window will lose the focus } } boolean vetoFocusChange = false; if (vetoFocusChange) { throw new PropertyVetoException("message", evt); } }
Related Examples |