Module java.desktop
Package java.awt

Interface KeyEventDispatcher

所有已知的实现类:
DefaultFocusManager, DefaultKeyboardFocusManager, FocusManager, KeyboardFocusManager
功能接口:
这是一个功能接口,因此可以用作lambda表达式或方法引用的赋值目标。

@FunctionalInterface public interface KeyEventDispatcher
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 Type
    Method
    Description
    boolean
    当前KeyboardFocusManager调用此方法,请求此KeyEventDispatcher代表其分派指定的事件。
  • Method Details

    • dispatchKeyEvent

      boolean dispatchKeyEvent(KeyEvent e)
      当前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表示相反
      参见: