Module  java.desktop
软件包  java.awt

Class KeyboardFocusManager

  • All Implemented Interfaces:
    KeyEventDispatcherKeyEventPostProcessor
    已知直接子类:
    DefaultKeyboardFocusManager


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

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

    一些浏览器将不同代码库中的小程序分割成单独的上下文,并在这些上下文之间建立墙壁。 在这种情况下,每个上下文将有一个KeyboardFocusManager。 其他浏览器将所有小程序放入相同的上下文中,这意味着所有小程序都将只有一个全局的KeyboardFocusManager。 这种行为是依赖于实现的。 有关更多信息,请参阅浏览器的文档。 不管有多少上下文可能存在,但是,根据ClassLoader,永远不会有多个焦点所有者,关注窗口或活动窗口。

    请参阅How to Use the Focus SubsystemJava教程一节,以及有关更多信息的Focus Specification

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

      • KeyboardFocusManager

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

      • setCurrentKeyboardFocusManager

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

        如果安装了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。

        此方法实际上并没有将焦点设置为指定的组件。 它只存储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事件。 此操作完成后,本机窗口系统将丢弃所有用户生成的密钥事件,直到用户选择一个新的组件来接收焦点,或者通过调用requestFocus()明确指定了一个组件。 此操作不会更改聚焦或活动的Windows。

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

        public void clearGlobalFocusOwner​()
                                   throws SecurityException
        在Java和本机级别清除全局焦点所有者。 如果存在焦点所有者,该组件将收到一个永久的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事件的最后一个组件。 焦点所有者和永久焦点所有者是等效的,除非临时焦点更改目前有效。 在这种情况下,临时焦点变化结束时,永久性焦点所有者将再次成为焦点所有者。

        此方法实际上并没有将焦点设置为指定的组件。 它仅存储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​()
        如果活动窗口与调用线程处于相同的上下文中,则返回活动窗口。 只有框架或对话框可以是活动窗口。 本地窗口系统可以表示活动窗口或其具有特殊装饰的儿童,例如突出显示的标题栏。 活动窗口始终是聚焦的窗口,或者是聚焦窗口的所有者的第一个框架或对话框。
        结果
        活动窗口,如果活动窗口不是调用线程的上下文的成员,则为null
        另请参见:
        getGlobalActiveWindow()setGlobalActiveWindow(java.awt.Window)
      • getGlobalActiveWindow

        protected Window getGlobalActiveWindow​()
                                        throws SecurityException
        返回活动窗口,即使调用线程与活动窗口处于不同的上下文中。 只有框架或对话框可以是活动窗口。 本地窗口系统可以表示活动窗口或其具有特殊装饰的儿童,例如突出显示的标题栏。 活动窗口始终是聚焦的窗口,或者是聚焦窗口的所有者的第一个框架或对话框。
        结果
        活动窗口
        异常
        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将对所有没有自己明确定义的Set的所有WindowWindow 这个Set也将被那些没有自己明确定义的这样的Set的那些Windows的任何一个小孩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与焦点遍历密钥相关的所有KeyEvent都将被使用,包括相关联的KEY_TYPED事件,并且不会发送到任何Component KEY_TYPED事件指定为聚焦遍历操作,或者将相同的事件映射到多个默认焦点遍历操作是一个运行时错误。

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

        参数
        id -一个 KeyboardFocusManager.FORWARD_TRAVERSAL_KEYSKeyboardFocusManager.BACKWARD_TRAVERSAL_KEYSKeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS ,或 KeyboardFocusManager.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)
        返回给定遍历操作的一组默认焦点遍历键。 这个遍历密钥集将在所有没有自己显式定义的这样的组的Windows上生效。 该集合也将被那些没有自己明确定义的这样的组的那些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是否正在管理此应用程序或小程序的浏览器上下文(“manageFocus”)的焦点
        • 焦点所有者(“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 - 要添加的PropertyChangeListener
        另请参见:
        removePropertyChangeListener(java.beans.PropertyChangeListener)getPropertyChangeListeners()addPropertyChangeListener(java.lang.String,java.beans.PropertyChangeListener)
      • addPropertyChangeListener

        public void addPropertyChangeListener​(String propertyName,
                                              PropertyChangeListener listener)
        将PropertyChangeListener添加到特定属性的侦听器列表中。 指定的属性可能是用户定义的,也可能是以下之一:
        • KeyboardFocusManager是否正在管理此应用程序或小程序的浏览器上下文(“manageFocus”)的焦点
        • 焦点所有者(“focusOwner”)
        • 永久焦点所有者(“permanentFocusOwner”)
        • 聚焦窗口(“focusedWindow”)
        • 活动窗口(“activeWindow”)
        • 默认焦点遍历策略(“defaultFocusTraversalPolicy”)
        • 默认设置FORWARD_TRAVERSAL_KEYS(“forwardDefaultFocusTraversalKeys”)
        • 默认设置BACKWARD_TRAVERSAL_KEYS(“backwardDefaultFocusTraversalKeys”)
        • 默认设置UP_CYCLE_TRAVERSAL_KEYS(“upCycleDefaultFocusTraversalKeys”)
        • 默认设置DOWN_CYCLE_TRAVERSAL_KEYS(“downCycleDefaultFocusTraversalKeys”)
        • 当前焦点循环根(“currentFocusCycleRoot”)
        如果侦听器为空,则不会抛出异常,也不会执行任何操作。
        参数
        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的调度程序链中。 此KeyboardFocusManager将请求每个KeyEventDispatcher调度由用户生成的KeyEvents,然后最终分派KeyEvent本身。 KeyEventDispatchers将按照添加的顺序进行通知。 一旦KeyEventDispatcher从其dispatchKeyEvent方法返回true ,通知将停止。 对于可以添加的KeyEventDispatchers的总数以及可以添加特定的KeyEventDispatcher实例的次数没有限制。

        如果指定了空调度器,则不会执行任何操作,也不会抛出任何异常。

        在多线程应用程序中, KeyEventDispatcher行为与其他AWT侦听器相同。 详见AWT Threading Issues

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

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

        如果指定了一个空调度器,如果指定的调度程序不在调度程序链中,或者如果在未明确重新注册的情况下指定了此KeyboardFocusManager,则不会执行任何操作,也不会引发异常。

        在多线程应用程序中, KeyEventDispatcher行为与其他AWT侦听器相同。 详见AWT Threading Issues

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

        protected List<KeyEventDispatcher> getKeyEventDispatchers​()
        将此KeyboardFocusManager的KeyEventDispatcher链作为列表返回。 该列表将不包括此KeyboardFocusManager,除非通过调用addKeyEventDispatcher显式重新注册。 如果没有其他的KeyEventDispatchers被注册,实现可以自由地返回null或一个长度为0的列表。客户端代码不应该假定一个行为超过另一个,也不应该假定一旦建立的行为将不会改变。
        结果
        可能为空或空的KeyEventDispatchers列表
        另请参见:
        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实例的次数没有限制。

        如果指定了空的后处理器,则不会采取任何操作,也不会抛出任何异常。

        在多线程应用程序中, 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将派发所有FocusEvents,所有与焦点相关的WindowEvent和所有KeyEvents。 这些事件应该基于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和客户端定义的KeyEventDispatchers的客户端实现必须调用redispatchEvent(target, e)而不是target.dispatchEvent(e)来调度事件。

        此方法仅供KeyboardFocusManagers和KeyEventDispatchers使用。 它不是一般客户使用。

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

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

        public abstract boolean postProcessKeyEvent​(KeyEvent e)
        此方法将由dispatchKeyEvent 默认情况下,此方法将通过消耗事件并激活快捷方式来处理映射到AWT MenuShortcut的任何未消息的KeyEvent。
        Specified by:
        postProcessKeyEvent在接口 KeyEventPostProcessor
        参数
        e - 后期处理的KeyEvent
        结果
        true表示没有其他的KeyEventPostProcessor将被通知KeyEvent。
        另请参见:
        dispatchKeyEvent(java.awt.event.KeyEvent)MenuShortcut
      • processKeyEvent

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

        protected abstract void enqueueKeyEvents​(long after,
                                                 Component untilFocused)
        由AWT调用,通知KeyboardFocusManager它应该延迟调度KeyEvents,直到指定的Component成为焦点所有者。 如果客户端代码请求焦点更改,并且AWT确定此请求可能由本机窗口系统授予,则AWT将调用此方法。 KeyboardFocusManager有责任延迟时间戳晚于指定时间戳的KeyEvents调度,直到指定的组件收到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)
      • focusNextComponent

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

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

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

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

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

        public final void focusPreviousComponent​()
        将组件聚焦到当前焦点所有者之前。
      • upFocusCycle

        public final void upFocusCycle​()
        将焦点移动到当前焦点所有者的一个焦点遍历周期。 通常,新的焦点所有者设置为当前焦点所有者的焦点循环根,并将当前焦点循环根设置为新焦点所有者的焦点循环根。 然而,如果当前焦点所有者的焦点循环根是Window,则通常将焦点所有者设置为焦点循环根的默认组件以进行对焦,并且当前焦点循环根不变。
      • downFocusCycle

        public final void downFocusCycle​()
        当焦点所有者是当前焦点循环根的容器时,将焦点向下移动当前焦点所有者的一个焦点遍历循环。 通常,焦点所有者设置为当前焦点所有者的默认组件以进行对焦,并将当前焦点循环根设置为当前焦点所有者。 如果当前焦点所有者不是作为焦点循环根的容器,则不会发生焦点遍历操作。