- 功能接口:
- 这是一个功能接口,因此可以用作lambda表达式或方法引用的赋值目标。
KeyEventDispatcher与当前KeyboardFocusManager合作,用于定位和分派所有KeyEvents。注册到当前KeyboardFocusManager的KeyEventDispatchers将在它们被分派到目标之前接收KeyEvents,允许每个KeyEventDispatcher重新定位事件、消耗事件、自行分派事件或进行其他更改。
请注意,KeyboardFocusManager本身实现了KeyEventDispatcher。默认情况下,当前KeyboardFocusManager将是所有未被注册的KeyEventDispatchers分派的KeyEvents的接收端。当前KeyboardFocusManager无法完全取消注册为KeyEventDispatcher。但是,如果KeyEventDispatcher报告已分派了KeyEvent,无论实际上是否如此,KeyboardFocusManager将不会对KeyEvent采取进一步的操作。(虽然客户端代码可以多次将当前KeyboardFocusManager注册为KeyEventDispatcher,但这通常是不必要且不推荐的。)
- 自 JDK 版本:
- 1.4
- 参见:
-
Method Summary
Modifier and TypeMethodDescriptionboolean
当前KeyboardFocusManager调用此方法,请求此KeyEventDispatcher代表其分派指定的事件。
-
Method Details
-
dispatchKeyEvent
当前KeyboardFocusManager调用此方法,请求此KeyEventDispatcher代表其分派指定的事件。此KeyEventDispatcher可以自由重新定位事件、消耗事件、自行分派事件或进行其他更改。通常使用此功能将KeyEvents传递给非焦点所有者的组件。例如,在可访问环境中导航非可聚焦窗口的子窗口时,这可能很有用。请注意,如果KeyEventDispatcher自行分派了KeyEvent,则必须使用redispatchEvent
来防止当前KeyboardFocusManager递归请求此KeyEventDispatcher再次分派事件。如果此方法的实现返回
false
,则KeyEvent将传递给链中的下一个KeyEventDispatcher,最终到达当前KeyboardFocusManager。如果实现返回true
,则假定已分派KeyEvent(尽管可能并非如此),并且当前KeyboardFocusManager将不会对KeyEvent采取进一步的操作。在这种情况下,KeyboardFocusManager.dispatchEvent
也应返回true
。如果实现消耗了KeyEvent,但返回false
,则消耗的事件仍将传递给链中的下一个KeyEventDispatcher。开发人员在将事件分派给目标之前检查事件是否已被消耗非常重要。默认情况下,当前KeyboardFocusManager不会分派已被消耗的KeyEvent。- 参数:
-
e
- 要分派的KeyEvent - 返回:
-
true
表示KeyboardFocusManager不应对KeyEvent采取进一步的操作;false
表示相反 - 参见:
-