模块  java.desktop
软件包  java.awt

Class KeyboardFocusManager

  • 实现的所有接口
    KeyEventDispatcherKeyEventPostProcessor
    已知直接子类:
    DefaultKeyboardFocusManager

    public abstract class KeyboardFocusManagerextends Objectimplements KeyEventDispatcher, KeyEventPostProcessor
    KeyboardFocusManager负责管理活动和聚焦的Windows以及当前焦点所有者。 焦点所有者被定义为应用程序中的组件,该组件通常将接收用户生成的所有KeyEvent。 聚焦窗口是包含焦点所有者的窗口。 只有一个框架或一个对话框可以是活动窗口。 本机窗口系统可以表示具有特殊装饰的活动窗口或其子窗口,例如突出显示的标题栏。 活动窗口始终是聚焦窗口,或者是聚焦窗口所有者的第一个框架或对话框。

    KeyboardFocusManager既是客户端代码的集中位置,用于查询焦点所有者并启动焦点更改,还包括所有FocusEvent的事件调度程序,与焦点相关的WindowEvent以及KeyEvents。

    有些浏览器将不同代码库中的applet分成不同的上下文,并在这些上下文之间建立隔阂。 在这种情况下,每个上下文将有一个KeyboardFocusManager。 其他浏览器将所有applet放在同一个上下文中,这意味着所有applet只有一个全局的KeyboardFocusManager。 此行为取决于实现。 有关更多信息,请参阅浏览器的文档。 然而,无论有多少上下文,每个ClassLoader都不会有多个焦点所有者,聚焦窗口或活动窗口。

    请参阅How to Use the Focus Subsystem ,在Java教程一节,并Focus Specification获取更多信息。

    从以下版本开始:
    1.4
    另请参见:
    WindowFrameDialogFocusEventWindowEventKeyEvent
    • 构造方法详细信息

      • KeyboardFocusManager

        public KeyboardFocusManager()
        初始化KeyboardFocusManager。
    • 方法详细信息

      • setCurrentKeyboardFocusManager

        public static void setCurrentKeyboardFocusManager​(KeyboardFocusManager newManager)                                           throws SecurityException
        为调用线程的上下文设置当前的KeyboardFocusManager实例。 如果指定了null,则当前的KeyboardFocusManager将替换为DefaultKeyboardFocusManager的新实例。

        如果安装了SecurityManager,则必须为调用线程授予AWTPermission“replaceKeyboardFocusManager”以替换当前的KeyboardFocusManager。 如果未授予此权限,则此方法将抛出SecurityException,并且当前的KeyboardFocusManager将保持不变。

        参数
        newManager - 此线程上下文的新KeyboardFocusManager
        异常
        SecurityException - 如果调用线程没有替换当前KeyboardFocusManager的权限
        另请参见:
        getCurrentKeyboardFocusManager()DefaultKeyboardFocusManager
      • getFocusOwner

        public Component getFocusOwner()
        如果焦点所有者与调用线程位于相同的上下文中,则返回焦点所有者。 焦点所有者被定义为应用程序中的组件,该组件通常将接收用户生成的所有KeyEvent。 如果为焦点所有者启用了焦点遍历键,则不会传递映射到焦点所有者的焦点遍历键的KeyEvent。 此外,KeyEventDispatchers可能会在到达焦点所有者之前重新定位或使用KeyEvent。
        结果
        焦点所有者,如果焦点所有者不是调用线程的上下文的成员,则返回null
        另请参见:
        getGlobalFocusOwner()setGlobalFocusOwner(java.awt.Component)
      • getGlobalFocusOwner

        protected Component getGlobalFocusOwner()                                 throws SecurityException
        返回焦点所有者,即使调用线程与焦点所有者位于不同的上下文中。 焦点所有者被定义为应用程序中的组件,该组件通常将接收用户生成的所有KeyEvent。 如果为焦点所有者启用了焦点遍历键,则不会传递映射到焦点所有者的焦点遍历键的KeyEvent。 此外,KeyEventDispatchers可能会在到达焦点所有者之前重新定位或使用KeyEvent。

        如果此KeyboardFocusManager不是调用线程上下文的当前KeyboardFocusManager,则此方法将抛出SecurityException。

        结果
        焦点所有者
        异常
        SecurityException - 如果此KeyboardFocusManager不是调用线程上下文的当前KeyboardFocusManager,并且调用线程没有“replaceKeyboardFocusManager”权限
        另请参见:
        getFocusOwner()setGlobalFocusOwner(java.awt.Component)
      • setGlobalFocusOwner

        protected void setGlobalFocusOwner​(Component focusOwner)                            throws SecurityException
        设置焦点所有者。 如果组件不可聚焦,则操作将被取消。 焦点所有者被定义为应用程序中的组件,该组件通常将接收用户生成的所有KeyEvent。 如果为焦点所有者启用了焦点遍历键,则不会传递映射到焦点所有者的焦点遍历键的KeyEvent。 此外,KeyEventDispatchers可能会在到达焦点所有者之前重新定位或使用KeyEvent。

        此方法实际上不会将焦点设置为指定的Component。 它仅存储随后由getFocusOwner()返回的getFocusOwner() 根据平台限制,使用Component.requestFocus()Component.requestFocusInWindow()更改焦点所有者。

        参数
        focusOwner - 焦点所有者
        异常
        SecurityException - 如果此KeyboardFocusManager不是调用线程上下文的当前KeyboardFocusManager,并且调用线程没有“replaceKeyboardFocusManager”权限
        另请参见:
        getFocusOwner()getGlobalFocusOwner()Component.requestFocus()Component.requestFocusInWindow()Component.isFocusable()
      • clearFocusOwner

        public void clearFocusOwner()
        如果焦点所有者存在并且与调用线程位于相同的上下文中,则清除Java和本机级别的焦点所有者,否则该方法将以静默方式返回。

        焦点所有者组件将收到永久FOCUS_LOST事件。 此操作完成后,本机窗口系统将丢弃所有用户生成的KeyEvent,直到用户选择新的Component来接收焦点,或者通过调用requestFocus()明确给予Component。 此操作不会更改聚焦或活动的Windows。

        从以下版本开始:
        1.8
        另请参见:
        Component.requestFocus()FocusEvent.FOCUS_LOST
      • clearGlobalFocusOwner

        public void clearGlobalFocusOwner()                           throws SecurityException
        清除Java和本机级别的全局焦点所有者。 如果存在焦点所有者,则该Component将收到永久FOCUS_LOST事件。 此操作完成后,本机窗口系统将丢弃所有用户生成的KeyEvent,直到用户选择新的Component来接收焦点,或者通过调用requestFocus()明确给予Component。 此操作不会更改聚焦或活动的Windows。

        如果安装了SecurityManager,则必须为调用线程授予“replaceKeyboardFocusManager”AWTPermission。 如果未授予此权限,则此方法将抛出SecurityException,并且不会清除当前焦点所有者。

        此方法仅供设置为当前KeyboardFocusManager的KeyboardFocusManager用于调用线程的上下文。 它不适合一般客户使用。

        异常
        SecurityException - 如果调用线程没有“replaceKeyboardFocusManager”权限
        另请参见:
        clearFocusOwner()Component.requestFocus()FocusEvent.FOCUS_LOST
      • getPermanentFocusOwner

        public Component getPermanentFocusOwner()
        如果永久焦点所有者与调用线程位于相同的上下文中,则返回永久焦点所有者。 永久焦点所有者被定义为应用程序中接收永久FOCUS_GAINED事件的最后一个组件。 除非临时焦点更改当前生效,否则焦点所有者和永久焦点所有者是等效的。 在这种情况下,当临时焦点改变结束时,永久焦点所有者将再次成为焦点所有者。
        结果
        永久焦点所有者,如果永久焦点所有者不是调用线程的上下文的成员,则返回null
        另请参见:
        getGlobalPermanentFocusOwner()setGlobalPermanentFocusOwner(java.awt.Component)
      • getGlobalPermanentFocusOwner

        protected Component getGlobalPermanentFocusOwner()                                          throws SecurityException
        返回永久焦点所有者,即使调用线程与永久焦点所有者位于不同的上下文中。 永久焦点所有者被定义为应用程序中接收永久FOCUS_GAINED事件的最后一个组件。 除非临时焦点更改当前生效,否则焦点所有者和永久焦点所有者是等效的。 在这种情况下,当临时焦点改变结束时,永久焦点所有者将再次成为焦点所有者。
        结果
        永久焦点所有者
        异常
        SecurityException - 如果此KeyboardFocusManager不是调用线程上下文的当前KeyboardFocusManager,并且调用线程没有“replaceKeyboardFocusManager”权限
        另请参见:
        getPermanentFocusOwner()setGlobalPermanentFocusOwner(java.awt.Component)
      • setGlobalPermanentFocusOwner

        protected void setGlobalPermanentFocusOwner​(Component permanentFocusOwner)                                     throws SecurityException
        设置永久焦点所有者。 如果组件不可聚焦,则操作将被取消。 永久焦点所有者被定义为应用程序中接收永久FOCUS_GAINED事件的最后一个组件。 除非临时焦点更改当前生效,否则焦点所有者和永久焦点所有者是等效的。 在这种情况下,当临时焦点改变结束时,永久焦点所有者将再次成为焦点所有者。

        此方法实际上不会将焦点设置为指定的Component。 它仅存储随后由getPermanentFocusOwner()返回的getPermanentFocusOwner() 根据平台限制,使用Component.requestFocus()Component.requestFocusInWindow()更改焦点所有者。

        参数
        permanentFocusOwner - 永久焦点所有者
        异常
        SecurityException - 如果此KeyboardFocusManager不是调用线程上下文的当前KeyboardFocusManager,并且调用线程没有“replaceKeyboardFocusManager”权限
        另请参见:
        getPermanentFocusOwner()getGlobalPermanentFocusOwner()Component.requestFocus()Component.requestFocusInWindow()Component.isFocusable()
      • getFocusedWindow

        public Window getFocusedWindow()
        如果焦点窗口与调用线程位于相同的上下文中,则返回焦点窗口。 聚焦窗口是包含焦点所有者的窗口。
        结果
        焦点窗口,如果焦点窗口不是调用线程的上下文的成员,则返回null
        另请参见:
        getGlobalFocusedWindow()setGlobalFocusedWindow(java.awt.Window)
      • getGlobalFocusedWindow

        protected Window getGlobalFocusedWindow()                                 throws SecurityException
        返回焦点窗口,即使调用线程与焦点窗口位于不同的上下文中。 聚焦窗口是包含焦点所有者的窗口。
        结果
        专注的窗口
        异常
        SecurityException - 如果此KeyboardFocusManager不是调用线程上下文的当前KeyboardFocusManager,并且调用线程没有“replaceKeyboardFocusManager”权限
        另请参见:
        getFocusedWindow()setGlobalFocusedWindow(java.awt.Window)
      • setGlobalFocusedWindow

        protected void setGlobalFocusedWindow​(Window focusedWindow)                               throws SecurityException
        设置焦点窗口。 聚焦窗口是包含焦点所有者的窗口。 如果指定的要聚焦的窗口不是可聚焦窗口,则将取消该操作。

        就本机窗口系统而言,此方法实际上不会更改聚焦窗口。 它仅存储随后由getFocusedWindow()返回的getFocusedWindow() 根据平台限制,使用Component.requestFocus()Component.requestFocusInWindow()更改聚焦窗口。

        参数
        focusedWindow - 专注的窗口
        异常
        SecurityException - 如果此KeyboardFocusManager不是调用线程上下文的当前KeyboardFocusManager,并且调用线程没有“replaceKeyboardFocusManager”权限
        另请参见:
        getFocusedWindow()getGlobalFocusedWindow()Component.requestFocus()Component.requestFocusInWindow()Window.isFocusableWindow()
      • getActiveWindow

        public Window getActiveWindow()
        如果活动Window与调用线程位于同一上下文中,则返回活动Window。 只有一个框架或一个对话框可以是活动窗口。 本机窗口系统可以表示具有特殊装饰的活动窗口或其子窗口,例如突出显示的标题栏。 活动窗口始终是聚焦窗口,或者是聚焦窗口所有者的第一个框架或对话框。
        结果
        活动Window,如果活动Window不是调用线程的上下文的成员,则返回null
        另请参见:
        getGlobalActiveWindow()setGlobalActiveWindow(java.awt.Window)
      • getGlobalActiveWindow

        protected Window getGlobalActiveWindow()                                throws SecurityException
        返回活动Window,即使调用线程与活动Window位于不同的上下文中。 只有一个框架或一个对话框可以是活动窗口。 本机窗口系统可以表示具有特殊装饰的活动窗口或其子窗口,例如突出显示的标题栏。 活动窗口始终是聚焦窗口,或者是聚焦窗口所有者的第一个框架或对话框。
        结果
        活动窗口
        异常
        SecurityException - 如果此KeyboardFocusManager不是调用线程上下文的当前KeyboardFocusManager,并且调用线程没有“replaceKeyboardFocusManager”权限
        另请参见:
        getActiveWindow()setGlobalActiveWindow(java.awt.Window)
      • setGlobalActiveWindow

        protected void setGlobalActiveWindow​(Window activeWindow)                              throws SecurityException
        设置活动窗口。 只有一个框架或一个对话框可以是活动窗口。 本机窗口系统可以表示具有特殊装饰的活动窗口或其子窗口,例如突出显示的标题栏。 活动窗口始终是聚焦窗口,或者是聚焦窗口所有者的第一个框架或对话框。

        就本机窗口系统而言,此方法实际上不会更改活动窗口。 它仅存储随后由getActiveWindow()返回的getActiveWindow() 根据平台限制,使用Component.requestFocus()Component.requestFocusInWindow()更改活动窗口。

        参数
        activeWindow - 活动窗口
        异常
        SecurityException - 如果此KeyboardFocusManager不是调用线程上下文的当前KeyboardFocusManager,并且调用线程没有“replaceKeyboardFocusManager”权限
        另请参见:
        getActiveWindow()getGlobalActiveWindow()Component.requestFocus()Component.requestFocusInWindow()
      • setDefaultFocusTraversalKeys

        public void setDefaultFocusTraversalKeys​(int id,                                         Set<? extends AWTKeyStroke> keystrokes)
        设置给定遍历操作的默认焦点遍历键。 此遍历键Set将在所有影响Window S作没有这样Set自己的明确定义。 Set也将由Windows中任何没有明确定义的Set的子Component递归地继承。

        默认焦点遍历键的默认值取决于实现。 Sun建议特定本机平台的所有实现都使用相同的默认值。 下面列出了Windows和Unix的建议。 这些建议用于Sun AWT实现。

        Recommended default values for focus traversal keys Identifier Meaning Default KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS Normal forward keyboard traversal TAB on KEY_PRESSED, CTRL-TAB on KEY_PRESSED KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS Normal reverse keyboard traversal SHIFT-TAB on KEY_PRESSED, CTRL-SHIFT-TAB on KEY_PRESSED KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS Go up one focus traversal cycle none KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS Go down one focus traversal cycle none
        要禁用遍历密钥,请使用空Set ; 建议使用Collections.EMPTY_SET

        使用AWTKeyStroke API,客户端代码可以指定在其上的两个特定KeyEvent S, KEY_PRESSEDKEY_RELEASED ,会发生焦点遍历操作。 但是,无论指定了哪个KeyEvent ,与焦点遍历键相关的所有KeyEvent (包括关联的KEY_TYPED事件)都将被使用,并且不会被分派到任何Component KEY_TYPED事件指定为映射到焦点遍历操作或将同一事件映射到多个默认焦点遍历操作是运行时错误。

        这种方法可能抛出ClassCastException如有Objectkeystrokes不是AWTKeyStroke

        参数
        id - KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYSKeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYSKeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS
        keystrokes - 用于指定操作的 AWTKeyStroke的集合
        异常
        IllegalArgumentException -如果ID是不是一个 KeyboardFocusManager.FORWARD_TRAVERSAL_KEYSKeyboardFocusManager.BACKWARD_TRAVERSAL_KEYSKeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS ,或 KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS ,或者击键为 null ,或者击键包含 null ,或者击键表示 KEY_TYPED事件,或者击键已映射为别的默认焦点遍历操作
        另请参见:
        getDefaultFocusTraversalKeys(int)Component.setFocusTraversalKeys(int, java.util.Set<? extends java.awt.AWTKeyStroke>)Component.getFocusTraversalKeys(int)
      • getDefaultFocusTraversalKeys

        public Set<AWTKeyStroke> getDefaultFocusTraversalKeys​(int id)
        返回给定遍历操作的一组默认焦点遍历键。 此遍历键Set将在没有明确定义的自己的Set的所有Windows上生效。 此Set也将由那些没有明确定义的自己的Set的那些Windows的任何子组件递归地继承。 (有关每个操作的完整说明,请参阅setDefaultFocusTraversalKeys
        参数
        id - KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS,KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS,KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS或KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS之一
        结果
        SetAWTKeyStroke s用于指定的操作; Set将是不可修改的,可能是空的; 永远不会退回null
        异常
        IllegalArgumentException - 如果id不是KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS,KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS,KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS或KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS之一
        另请参见:
        setDefaultFocusTraversalKeys(int, java.util.Set<? extends java.awt.AWTKeyStroke>)Component.setFocusTraversalKeys(int, java.util.Set<? extends java.awt.AWTKeyStroke>)Component.getFocusTraversalKeys(int)
      • getCurrentFocusCycleRoot

        public Container getCurrentFocusCycleRoot()
        如果当前焦点循环根与调用线程位于同一上下文中,则返回当前焦点循环根。 如果焦点所有者本身是焦点循环根,那么在正常焦点遍历期间哪些组件代表要聚焦的下一个和前一个组件可能是模糊的。 在这种情况下,当前的焦点循环根用于区分可能性。

        此方法仅供KeyboardFocusManagers和焦点实现使用。 它不适合一般客户使用。

        结果
        当前焦点循环根,如果当前焦点循环根不是调用线程的上下文的成员,则返回null
        另请参见:
        getGlobalCurrentFocusCycleRoot()setGlobalCurrentFocusCycleRoot(java.awt.Container)
      • getGlobalCurrentFocusCycleRoot

        protected Container getGlobalCurrentFocusCycleRoot()                                            throws SecurityException
        返回当前焦点循环根,即使调用线程与当前焦点循环根不同。 如果焦点所有者本身是焦点循环根,那么在正常焦点遍历期间哪些组件代表要聚焦的下一个和前一个组件可能是模糊的。 在这种情况下,当前的焦点循环根用于区分可能性。
        结果
        当前焦点循环根,如果当前焦点循环根不是调用线程的上下文的成员,则返回null
        异常
        SecurityException - 如果此KeyboardFocusManager不是调用线程上下文的当前KeyboardFocusManager,并且调用线程没有“replaceKeyboardFocusManager”权限
        另请参见:
        getCurrentFocusCycleRoot()setGlobalCurrentFocusCycleRoot(java.awt.Container)
      • setGlobalCurrentFocusCycleRoot

        public void setGlobalCurrentFocusCycleRoot​(Container newFocusCycleRoot)                                    throws SecurityException
        设置当前焦点循环根。 如果焦点所有者本身是焦点循环根,那么在正常焦点遍历期间哪些组件代表要聚焦的下一个和前一个组件可能是模糊的。 在这种情况下,当前的焦点循环根用于区分可能性。

        如果安装了SecurityManager,则必须为调用线程授予“replaceKeyboardFocusManager”AWTPermission。 如果未授予此权限,则此方法将抛出SecurityException,并且不会更改当前焦点循环根。

        此方法仅供KeyboardFocusManagers和焦点实现使用。 它不适合一般客户使用。

        参数
        newFocusCycleRoot - 新的焦点循环根
        异常
        SecurityException - 如果调用线程没有“replaceKeyboardFocusManager”权限
        另请参见:
        getCurrentFocusCycleRoot()getGlobalCurrentFocusCycleRoot()
      • addPropertyChangeListener

        public void addPropertyChangeListener​(PropertyChangeListener listener)
        将PropertyChangeListener添加到侦听器列表。 侦听器已注册此类的所有绑定属性,包括以下内容:
        • KeyboardFocusManager当前是否正在管理此应用程序或applet的浏览器上下文(“managingFocus”)的焦点
        • 焦点所有者(“focusOwner”)
        • 永久焦点所有者(“permanentFocusOwner”)
        • 聚焦窗口(“focusedWindow”)
        • 活动窗口(“activeWindow”)
        • 默认焦点遍历策略(“defaultFocusTraversalPolicy”)
        • 默认FORWARD_TRAVERSAL_KEYS(“forwardDefaultFocusTraversalKeys”)的设置
        • 默认设置为BACKWARD_TRAVERSAL_KEYS(“backwardDefaultFocusTraversalKeys”)
        • 默认设置UP_CYCLE_TRAVERSAL_KEYS(“upCycleDefaultFocusTraversalKeys”)
        • 默认设置为DOWN_CYCLE_TRAVERSAL_KEYS(“downCycleDefaultFocusTraversalKeys”)
        • 当前焦点循环根(“currentFocusCycleRoot”)
        如果listener为null,则不会抛出异常并且不执行任何操作。
        参数
        listener - 要添加的PropertyChangeListener
        另请参见:
        removePropertyChangeListener(java.beans.PropertyChangeListener)getPropertyChangeListeners()addPropertyChangeListener(java.lang.String,java.beans.PropertyChangeListener)
      • addPropertyChangeListener

        public void addPropertyChangeListener​(String propertyName,                                      PropertyChangeListener listener)
        将PropertyChangeListener添加到特定属性的侦听器列表中。 指定的属性可以是用户定义的,也可以是以下之一:
        • KeyboardFocusManager当前是否正在管理此应用程序或applet的浏览器上下文(“managingFocus”)的焦点
        • 焦点所有者(“focusOwner”)
        • 永久焦点所有者(“permanentFocusOwner”)
        • 聚焦窗口(“focusedWindow”)
        • 活动窗口(“activeWindow”)
        • 默认焦点遍历策略(“defaultFocusTraversalPolicy”)
        • 默认FORWARD_TRAVERSAL_KEYS(“forwardDefaultFocusTraversalKeys”)的设置
        • 默认设置为BACKWARD_TRAVERSAL_KEYS(“backwardDefaultFocusTraversalKeys”)
        • 默认设置UP_CYCLE_TRAVERSAL_KEYS(“upCycleDefaultFocusTraversalKeys”)
        • 默认设置为DOWN_CYCLE_TRAVERSAL_KEYS(“downCycleDefaultFocusTraversalKeys”)
        • 当前焦点循环根(“currentFocusCycleRoot”)
        如果listener为null,则不会抛出异常并且不执行任何操作。
        参数
        propertyName - 上面列出的其中一个房产名称
        listener - 要添加的PropertyChangeListener
        另请参见:
        addPropertyChangeListener(java.beans.PropertyChangeListener)removePropertyChangeListener(java.lang.String,java.beans.PropertyChangeListener)getPropertyChangeListeners(java.lang.String)
      • firePropertyChange

        protected void firePropertyChange​(String propertyName,                                  Object oldValue,                                  Object newValue)
        触发PropertyChangeEvent以响应绑定属性的更改。 该活动将发送给所有已注册的PropertyChangeListeners。 如果oldValue和newValue相同,则不会传递任何事件。
        参数
        propertyName - 已更改的属性的名称
        oldValue - 该物业以前的价值
        newValue - 该物业的新值
      • fireVetoableChange

        protected void fireVetoableChange​(String propertyName,                                  Object oldValue,                                  Object newValue)                           throws PropertyVetoException
        触发PropertyChangeEvent以响应可否决属性的更改。 该活动将发送给所有已注册的VetoableChangeListeners。 如果VetoableChangeListener抛出PropertyVetoException,则会触发一个新事件,将所有VetoableChangeListener恢复为旧值,然后重新抛出异常。 如果oldValue和newValue相同,则不会传递任何事件。
        参数
        propertyName - 已更改的属性的名称
        oldValue - 该物业以前的价值
        newValue - 该物业的新值
        异常
        PropertyVetoException - 如果 VetoableChangeListener投掷 PropertyVetoException
      • addKeyEventDispatcher

        public void addKeyEventDispatcher​(KeyEventDispatcher dispatcher)
        将KeyEventDispatcher添加到此KeyboardFocusManager的调度程序链。 在最终调度KeyEvent本身之前,此KeyboardFocusManager将请求每个KeyEventDispatcher调度用户生成的KeyEvent。 KeyEventDispatcher将按添加顺序通知。 只要一个KeyEventDispatcher从其dispatchKeyEvent方法返回true ,通知就会暂停。 可以添加的KeyEventDispatcher总数没有限制,也没有限制可以添加特定KeyEventDispatcher实例的次数。

        如果指定了null调度程序,则不执行任何操作,也不会引发异常。

        在多线程应用程序中, KeyEventDispatcher行为与其他AWT侦听器相同。 有关详细信息,请参阅AWT Threading Issues

        参数
        dispatcher - 要添加到调度程序链的KeyEventDispatcher
        另请参见:
        removeKeyEventDispatcher(java.awt.KeyEventDispatcher)
      • removeKeyEventDispatcher

        public void removeKeyEventDispatcher​(KeyEventDispatcher dispatcher)
        删除之前添加到此KeyboardFocusManager的调度程序链的KeyEventDispatcher。 除非通过调用addKeyEventDispatcher明确重新注册,否则此KeyboardFocusManager本身不能被删除。

        如果指定了null调度程序,如果指定的调度程序不在调度程序链中,或者指定了此KeyboardFocusManager而未显式重新注册,则不执行任何操作,也不会引发异常。

        在多线程应用程序中, KeyEventDispatcher行为与其他AWT侦听器相同。 有关详细信息,请参阅AWT Threading Issues

        参数
        dispatcher - 要从调度程序链中删除的KeyEventDispatcher
        另请参见:
        addKeyEventDispatcher(java.awt.KeyEventDispatcher)
      • getKeyEventDispatchers

        protected List<KeyEventDispatcher> getKeyEventDispatchers()
        以List的形式返回此KeyboardFocusManager的KeyEventDispatcher链。 除非通过调用addKeyEventDispatcher明确重新注册,否则List不会包含此KeyboardFocusManager。 如果没有注册其他KeyEventDispatcher,则实现可以自由返回null或长度为0的List。客户端代码不应该假定一个行为超过另一个,也不应该假设行为一旦建立就不会改变。
        结果
        一个可能为null或空的KeyEventDispatcher列表
        另请参见:
        addKeyEventDispatcher(java.awt.KeyEventDispatcher)removeKeyEventDispatcher(java.awt.KeyEventDispatcher)
      • addKeyEventPostProcessor

        public void addKeyEventPostProcessor​(KeyEventPostProcessor processor)
        将KeyEventPostProcessor添加到此KeyboardFocusManager的后处理器链中。 在将KeyEvent分派给目标并由其处理后,KeyboardFocusManager将请求每个KeyEventPostProcessor执行任何必要的后处理作为KeyEvent最终解决方案的一部分。 KeyEventPostProcessors将按添加顺序通知; 最后会通知当前的KeyboardFocusManager。 一旦一个KeyEventPostProcessor从其postProcessKeyEvent方法返回true ,通知将暂停。 可以添加的KeyEventPostProcessors总数没有限制,也没有限制可以添加特定KeyEventPostProcessor实例的次数。

        如果指定了null后处理器,则不执行任何操作,也不会引发异常。

        在多线程应用程序中, KeyEventPostProcessor行为与其他AWT侦听器相同。 有关详细信息,请参阅AWT Threading Issues

        参数
        processor - 要添加到后处理器链的KeyEventPostProcessor
        另请参见:
        removeKeyEventPostProcessor(java.awt.KeyEventPostProcessor)
      • removeKeyEventPostProcessor

        public void removeKeyEventPostProcessor​(KeyEventPostProcessor processor)
        从此KeyboardFocusManager的后处理器链中删除以前添加的KeyEventPostProcessor。 此KeyboardFocusManager本身不能完全从链中删除。 只能删除通过addKeyEventPostProcessor添加的其他参考。

        如果指定了空后处理器,如果指定的后处理器不在后处理器链中,或者未指定此KeyboardFocusManager而未显式添加,则不执行任何操作,也不会引发异常。

        在多线程应用程序中, KeyEventPostProcessor行为与其他AWT侦听器相同。 有关详细信息,请参见AWT Threading Issues

        参数
        processor - 要从后处理器链中删除的KeyEventPostProcessor
        另请参见:
        addKeyEventPostProcessor(java.awt.KeyEventPostProcessor)
      • dispatchEvent

        public abstract boolean dispatchEvent​(AWTEvent e)
        AWT事件调度程序调用此方法,请求当前KeyboardFocusManager代表它调度指定的事件。 预计所有KeyboardFocusManagers都将调度所有FocusEvent,与焦点相关的所有WindowEvent以及所有KeyEvent。 应根据KeyboardFocusManager的焦点所有者和焦点和活动Windows的概念调度这些事件,有时会覆盖指定AWTEvent的源。 必须使用redispatchEvent进行调度,以防止AWT事件调度程序递归请求KeyboardFocusManager再次调度该事件。 如果此方法返回false ,则AWT事件调度程序将尝试自行调度该事件。
        参数
        e - 要派遣的AWTEvent
        结果
        true如果此方法调度该事件; 否则为false
        另请参见:
        redispatchEvent(java.awt.Component, java.awt.AWTEvent)dispatchKeyEvent(java.awt.event.KeyEvent)
      • redispatchEvent

        public final void redispatchEvent​(Component target,                                  AWTEvent e)
        以这样一种方式重新分配AWTEvent,即AWT事件调度程序不会递归地请求KeyboardFocusManager或任何已安装的KeyEventDispatchers再次调度该事件。 dispatchEvent和客户端定义的KeyEventDispatcher的客户端实现必须调用redispatchEvent(target, e)而不是target.dispatchEvent(e)来调度事件。

        此方法仅供KeyboardFocusManagers和KeyEventDispatcher使用。 它不适合一般客户使用。

        参数
        target - 应将事件分派到的组件
        e - 要派遣的事件
        另请参见:
        dispatchEvent(java.awt.AWTEvent)KeyEventDispatcher
      • dispatchKeyEvent

        public abstract boolean dispatchKeyEvent​(KeyEvent e)
        通常,如果调度程序链中没有其他KeyEventDispatcher调度KeyEvent,或者没有注册其他KeyEventDispatcher,则此方法将由dispatchEvent调用。 如果此方法的实现返回falsedispatchEvent可能试图指派KeyEvent本身,或者可能简单地返回false 如果true返回, dispatchEvent应该返回true为好。
        Specified by:
        dispatchKeyEvent在接口 KeyEventDispatcher
        参数
        e - 当前KeyboardFocusManager已请求此KeyEventDispatcher调度的KeyEvent
        结果
        true如果调度了KeyEvent; 否则为false
        另请参见:
        dispatchEvent(java.awt.AWTEvent)
      • processKeyEvent

        public abstract void processKeyEvent​(Component focusedComponent,                                     KeyEvent e)
        当且仅当KeyEvent表示指定的focusedComponent的焦点遍历键时,此方法才启动焦点遍历操作。 预计focusedComponent是当前的焦点所有者,尽管不一定是这种情况。 如果不是,焦点遍历将继续进行,就好像focusedComponent是当前焦点所有者一样。
        参数
        focusedComponent - 如果指定的事件表示组件的焦点遍历键,则该组件将成为焦点遍历操作的基础
        e - 可能表示焦点遍历键的事件
      • enqueueKeyEvents

        protected abstract void enqueueKeyEvents​(long after,                                         Component untilFocused)
        由AWT调用以通知KeyboardFocusManager它应该延迟调度KeyEvent,直到指定的Component成为焦点所有者。 如果客户端代码请求焦点更改,并且AWT确定此请求可能由本机窗口系统授予,则AWT将调用此方法。 KeyboardFocusManager负责延迟调度时间戳晚于指定时间戳的KeyEvent,直到指定的Component收到FOCUS_GAINED事件,或者AWT通过调用dequeueKeyEventsdiscardKeyEvents取消延迟请求。
        参数
        after - 当前事件的时间戳,如果当前事件没有时间戳,则当前系统时间,或者AWT无法确定当前正在处理哪个事件
        untilFocused - 在任何挂起的KeyEvent之前应该接收FOCUS_GAINED事件的组件
        另请参见:
        dequeueKeyEvents(long, java.awt.Component)discardKeyEvents(java.awt.Component)
      • dequeueKeyEvents

        protected abstract void dequeueKeyEvents​(long after,                                         Component untilFocused)
        由AWT调用以通知KeyboardFocusManager它应该取消KeyEvents的延迟分派。 由于调用具有相同时间戳和组件的enqueueKeyEvents所有KeyEvent都应该被释放,以便正常分派给当前焦点所有者。 如果给定的时间戳小于零,则应取消具有最早时间戳(如果有)的给定组件的未完成的入队请求。
        参数
        after -调用中指定的时间戳 enqueueKeyEvents ,或者任何值<0
        untilFocused - 对 enqueueKeyEvents的调用中指定的组件
        另请参见:
        enqueueKeyEvents(long, java.awt.Component)discardKeyEvents(java.awt.Component)
      • discardKeyEvents

        protected abstract void discardKeyEvents​(Component comp)
        由AWT调用以通知KeyboardFocusManager它应该取消KeyEvents的延迟分派。 由于对具有相同组件的enqueueKeyEvents的一次或多次调用enqueueKeyEvents所有KeyEvent都应被丢弃。
        参数
        comp - 在对 enqueueKeyEvents一次或多次调用中指定的组件
        另请参见:
        enqueueKeyEvents(long, java.awt.Component)dequeueKeyEvents(long, java.awt.Component)
      • focusNextComponent

        public abstract void focusNextComponent​(Component aComponent)
        在aComponent之后聚焦Component,通常基于FocusTraversalPolicy。
        参数
        aComponent - 作为焦点遍历操作基础的组件
        另请参见:
        FocusTraversalPolicy
      • focusPreviousComponent

        public abstract void focusPreviousComponent​(Component aComponent)
        在aComponent之前聚焦Component,通常基于FocusTraversalPolicy。
        参数
        aComponent - 作为焦点遍历操作基础的组件
        另请参见:
        FocusTraversalPolicy
      • upFocusCycle

        public abstract void upFocusCycle​(Component aComponent)
        将焦点向上移动一个焦点遍历循环。 通常,焦点所有者设置为aComponent的焦点循环根,并且当前焦点循环根设置为新焦点所有者的焦点循环根。 但是,如果aComponent的焦点循环根是一个Window,那么焦点所有者通常会设置为要聚焦的Window的默认Component,并且当前的焦点循环根不变。
        参数
        aComponent - 作为焦点遍历操作基础的组件
      • downFocusCycle

        public abstract void downFocusCycle​(Container aContainer)
        将焦点向下移动一个焦点遍历循环。 通常,如果aContainer是焦点循环根,则焦点所有者将设置为aContainer的默认Component以进行焦点,并将当前焦点循环根设置为aContainer。 如果aContainer不是焦点循环根,则不会发生焦点遍历操作。
        参数
        aContainer - 作为焦点遍历操作基础的Container
      • focusNextComponent

        public final void focusNextComponent()
        在当前焦点所有者之后聚焦Component。
      • focusPreviousComponent

        public final void focusPreviousComponent()
        在当前焦点所有者之前聚焦Component。
      • upFocusCycle

        public final void upFocusCycle()
        将焦点从当前焦点所有者向上移动一个焦点遍历循环。 通常,新焦点所有者设置为当前焦点所有者的焦点循环根,并且当前焦点循环根设置为新焦点所有者的焦点循环根。 但是,如果当前焦点所有者的焦点循环根是一个窗口,那么焦点所有者通常被设置为焦点循环根的默认组件以进行焦点,并且当前焦点循环根不变。
      • downFocusCycle

        public final void downFocusCycle()
        将焦点从当前焦点所有者向下移动一个焦点遍历循环,当且仅当当前焦点所有者是作为焦点循环根的Container时。 通常,焦点所有者设置为当前焦点所有者的默认Component以进行焦点,并且当前焦点周期根目录设置为当前焦点所有者。 如果当前焦点所有者不是作为焦点循环根的Container,则不会发生焦点遍历操作。