Activating a Keystroke When Any Component in the Window Has Focus
Normally, a keystroke registered to a component is activated when the
component has the focus. This type of activation condition is called
WHEN_FOCUSED. It is possible to specify that a keystroke be
activated if any component (including itself) in the window has the
focus. This type of keystroke activation condition is called
WHEN_IN_FOCUSED_WINDOW.
Keyboard accelerators use this type of keystroke activation
condition. For example, in many applications, regardless of which
component has the focus, typing F1 in an active window causes a help
window to appear.
There are three types of activation conditions available:
WHEN_FOCUSED, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, and
WHEN_IN_FOCUSED_WINDOW. When a key is typed, the focused
component is checked for a registered keystroke to handle the typed
key. If found, the action bound to the keystroke is invoked. If not
found, the set of WHEN_ANCESTOR_OF_FOCUSED_COMPONENT keystrokes
is searched for a handler of the typed key.
WHEN_ANCESTOR_OF_FOCUSED_COMPONENT is described in
Activating a Keystroke When Any Child Component Has Focus. If none are found still, the
set of WHEN_IN_FOCUSED_WINDOW keystrokes is searched for a
handler of the typed key.
In non-WHEN_FOCUSED activated keystrokes, the source of
the resulting action event is the component to which the keystroke is
registered, not the focused component.
// To create an action, see Creating an Action
// Register keystroke
component.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
KeyStroke.getKeyStroke("F2"), action.getValue(Action.NAME));
// Register action
component.getActionMap().put(action.getValue(Action.NAME), action);
Post a comment