Module  java.desktop
软件包  java.awt

Interface KeyEventDispatcher

  • 所有已知实现类:
    DefaultFocusManagerDefaultKeyboardFocusManagerFocusManagerKeyboardFocusManager
    Functional Interface:
    这是一个功能界面,因此可以用作lambda表达式或方法引用的赋值对象。


    @FunctionalInterface
    public interface KeyEventDispatcher
    KeyEventDispatcher与所有KeyEvents的目标和调度中的当前KeyboardFocusManager配合使用。 使用当前KeyboardFocusManager注册的KeyEventDispatchers将在它们被派发到其目标之前接收KeyEvent,从而允许每个KeyEventDispatcher重新定位事件,使用它,调度事件本身或进行其他更改。

    请注意,KeyboardFocusManager本身实现了KeyEventDispatcher。 默认情况下,当前的KeyboardFocusManager将是注册的KeyEventDispatchers未发送的所有KeyEvent的接收器。 当前的KeyboardFocusManager不能被完全注销为KeyEventDispatcher。 但是,如果KeyEventDispatcher报告它分派了KeyEvent,无论是否实际执行此操作,KeyboardFocusManager将不再对KeyEvent执行任何操作。 (虽然客户端代码可以将当前的KeyboardFocusManager注册为KeyEventDispatcher一次或多次,但这通常是不需要的,不推荐使用。)

    从以下版本开始:
    1.4
    另请参见:
    KeyboardFocusManager.addKeyEventDispatcher(java.awt.KeyEventDispatcher)KeyboardFocusManager.removeKeyEventDispatcher(java.awt.KeyEventDispatcher)
    • 方法详细信息

      • dispatchKeyEvent

        boolean dispatchKeyEvent​(KeyEvent e)
        此方法由当前的KeyboardFocusManager调用,请求此KeyEventDispatcher代表它分派指定的事件。 此KeyEventDispatcher可以自由重新定位事件,消耗它,分派它自己或进行其他更改。 此功能通常用于将KeyEvents传递给焦点所有者以外的组件。 例如,在可访问环境中导航不可聚焦Windows的子项时,这可能很有用。 请注意,如果KeyEventDispatcher调度KeyEvent本身,则必须使用redispatchEvent来防止当前的KeyboardFocusManager递归地请求此KeyEventDispatcher再次分派该事件。

        如果此方法的实现返回false ,则将KeyEvent传递到链中的下一个KeyEventDispatcher,以当前的KeyboardFocusManager结尾。 如果一个实现返回true ,则假定KeyEvent已被调度(尽管不需要这样),并且当前的KeyboardFocusManager将不再对KeyEvent执行任何操作。 在这种情况下, KeyboardFocusManager.dispatchEvent应该返回true 如果一个实现消耗了KeyEvent,但是返回false ,那么消耗的事件仍将被传递给链中的下一个KeyEventDispatcher。 开发人员必须检查KeyEvent是否在将其分派到目标之前已被使用。 默认情况下,当前的KeyboardFocusManager将不会调度消耗的KeyEvent。

        参数
        e - 要发送的KeyEvent
        结果
        true如果KeyboardFocusManager对KeyEvent不应该采取进一步的操作; false否则
        另请参见:
        KeyboardFocusManager.redispatchEvent(java.awt.Component, java.awt.AWTEvent)