模块 java.desktop
 java.awt

类 KeyboardFocusManager

java.lang.Object
java.awt.KeyboardFocusManager
所有已实现的接口:
KeyEventDispatcher , KeyEventPostProcessor
已知子类:
DefaultKeyboardFocusManager

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

KeyboardFocusManager 既是客户端代码查询焦点所有者和启动焦点更改的集中位置,也是所有 FocusEvent、与焦点相关的 WindowEvent 和 KeyEvent 的事件调度程序。

一些浏览器将不同代码库中的小程序划分为不同的上下文,并在这些上下文之间建立隔离墙。在这种情况下,每个上下文将有一个 KeyboardFocusManager。其他浏览器将所有小程序置于相同的上下文中,这意味着所有小程序将只有一个全局的 KeyboardFocusManager。此行为依赖于实现。有关详细信息,请参阅浏览器的文档。然而,无论有多少上下文,每个 ClassLoader 都不会超过一个焦点所有者、焦点窗口或活动窗口。

请参阅 如何使用焦点子系统The Java Tutorial 中的一个部分和 对焦规格 了解更多信息。

自从:
1.4
参见:
  • 字段详细信息

  • 构造方法详细信息

    • KeyboardFocusManager

      public KeyboardFocusManager()
      初始化 KeyboardFocusManager。
  • 方法详情

    • getCurrentKeyboardFocusManager

      public static KeyboardFocusManager  getCurrentKeyboardFocusManager()
      返回调用线程上下文的当前 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
      参见:
    • getFocusOwner

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

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

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

      返回:
      焦点所有者
      抛出:
      SecurityException - 如果此 KeyboardFocusManager 不是调用线程上下文的当前 KeyboardFocusManager,并且调用线程没有“replaceKeyboardFocusManager”权限
      参见:
    • setGlobalFocusOwner

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

      该方法实际上并没有将焦点设置到指定的 Component。它仅存储随后由 getFocusOwner() 返回的值。使用 Component.requestFocus()Component.requestFocusInWindow() 更改焦点所有者,受平台限制。

      参数:
      focusOwner - 焦点所有者
      抛出:
      SecurityException - 如果此 KeyboardFocusManager 不是调用线程上下文的当前 KeyboardFocusManager,并且调用线程没有“replaceKeyboardFocusManager”权限
      参见:
    • clearFocusOwner

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

      焦点所有者组件将收到一个永久性的 FOCUS_LOST 事件。此操作完成后,本机窗口系统将丢弃所有用户生成的 KeyEvent,直到用户选择一个新的组件来接收焦点,或者通过调用 requestFocus() 显式地为组件提供焦点。此操作不会更改获得焦点或活动的窗口。

      自从:
      1.8
      参见:
    • clearGlobalFocusOwner

      public void clearGlobalFocusOwner() throws SecurityException
      在 Java 和本机级别清除全局焦点所有者。如果存在焦点所有者,则该组件将收到一个永久性的 FOCUS_LOST 事件。此操作完成后,本机窗口系统将丢弃所有用户生成的 KeyEvent,直到用户选择一个新的组件来接收焦点,或者通过调用 requestFocus() 显式地为组件提供焦点。此操作不会更改获得焦点或活动的窗口。

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

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

      抛出:
      SecurityException - 如果调用线程没有“replaceKeyboardFocusManager”权限
      参见:
    • getPermanentFocusOwner

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

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

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

      该方法实际上并没有将焦点设置到指定的 Component。它仅存储随后由 getPermanentFocusOwner() 返回的值。使用 Component.requestFocus()Component.requestFocusInWindow() 更改焦点所有者,受平台限制。

      参数:
      permanentFocusOwner - 永久焦点所有者
      抛出:
      SecurityException - 如果此 KeyboardFocusManager 不是调用线程上下文的当前 KeyboardFocusManager,并且调用线程没有“replaceKeyboardFocusManager”权限
      参见:
    • getFocusedWindow

      public Window  getFocusedWindow()
      如果聚焦窗口与调用线程处于同一上下文中,则返回聚焦窗口。获得焦点的 Window 是属于或包含焦点所有者的 Window。
      返回:
      聚焦窗口,如果聚焦窗口不是调用线程上下文的成员,则返回 null
      参见:
    • getGlobalFocusedWindow

      protected Window  getGlobalFocusedWindow() throws SecurityException
      返回焦点窗口,即使调用线程与焦点窗口处于不同的上下文中也是如此。获得焦点的 Window 是属于或包含焦点所有者的 Window。
      返回:
      焦点窗口
      抛出:
      SecurityException - 如果此 KeyboardFocusManager 不是调用线程上下文的当前 KeyboardFocusManager,并且调用线程没有“replaceKeyboardFocusManager”权限
      参见:
    • setGlobalFocusedWindow

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

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

      参数:
      focusedWindow - 聚焦窗口
      抛出:
      SecurityException - 如果此 KeyboardFocusManager 不是调用线程上下文的当前 KeyboardFocusManager,并且调用线程没有“replaceKeyboardFocusManager”权限
      参见:
    • getActiveWindow

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

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

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

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

      参数:
      activeWindow - 活动窗口
      抛出:
      SecurityException - 如果此 KeyboardFocusManager 不是调用线程上下文的当前 KeyboardFocusManager,并且调用线程没有“replaceKeyboardFocusManager”权限
      参见:
    • getDefaultFocusTraversalPolicy

      public FocusTraversalPolicy  getDefaultFocusTraversalPolicy()
      返回默认的 FocusTraversalPolicy。顶级组件在创建时使用此值通过显式调用 Container.setFocusTraversalPolicy 来初始化自己的焦点遍历策略。
      返回:
      默认的 FocusTraversalPolicy。永远不会返回 null。
      参见:
    • setDefaultFocusTraversalPolicy

      public void setDefaultFocusTraversalPolicy(FocusTraversalPolicy  defaultPolicy)
      设置默认的 FocusTraversalPolicy。顶级组件在创建时使用此值通过显式调用 Container.setFocusTraversalPolicy 来初始化自己的焦点遍历策略。注意:此调用不会影响已创建的组件,因为它们已初始化策略。只有新组件才会使用此策略作为它们的默认策略。
      参数:
      defaultPolicy - 新的默认 FocusTraversalPolicy
      抛出:
      IllegalArgumentException - 如果 defaultPolicy 为空
      参见:
    • setDefaultFocusTraversalKeys

      public void setDefaultFocusTraversalKeys(int id, Set <? extends AWTKeyStroke > keystrokes)
      为给定的遍历操作设置默认的焦点遍历键。这个遍历键 Set 将对所有没有自己明确定义的 SetWindow 有效。这个 Set 也将被那些 Windows 的任何孩子 Component 递归继承,而这些 Set 没有自己明确定义的 Set

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

      焦点遍历键的推荐默认值
      Identifier 意义 默认
      KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS 正常的正向键盘遍历 TABKEY_PRESSED 上,CTRL-TABKEY_PRESSED
      KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS 正常反向键盘遍历 SHIFT-TABKEY_PRESSED 上,CTRL-SHIFT-TABKEY_PRESSED
      KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS 上一个焦点遍历循环 没有任何
      KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS 向下一个焦点遍历循环 没有任何
      要禁用遍历键,请使用空的 Set ;推荐Collections.EMPTY_SET

      使用 AWTKeyStroke API,客户端代码可以指定两个特定的 KeyEventKEY_PRESSEDKEY_RELEASED 中的哪一个,将发生焦点遍历操作。然而,无论指定哪个KeyEvent,所有与焦点遍历键相关的KeyEvents,包括关联的KEY_TYPED事件,都将被消耗,并且不会被派发给任何Component。将 KEY_TYPED 事件指定为映射到焦点遍历操作,或将同一事件映射到多个默认焦点遍历操作是运行时错误。

      如果 keystrokes 中的任何 Object 不是 AWTKeyStroke,此方法可能会抛出 ClassCastException

      参数:
      id - KeyboardFocusManager.FORWARD_TRAVERSAL_KEYSKeyboardFocusManager.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_KEYSKeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS 之一,或者如果击键是 null ,或者如果击键包含 null ,或者如果任何击键代表一个 KEY_TYPED 事件,或者如果任何击键已经映射到另一个默认的焦点遍历操作
      参见:
    • getDefaultFocusTraversalKeys

      public Set <AWTKeyStroke > getDefaultFocusTraversalKeys(int id)
      为给定的遍历操作返回一组默认的焦点遍历键。这个遍历键集将对所有没有明确定义自己的 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 之一
      返回:
      指定操作的 AWTKeyStrokeSetSet 将不可修改,并且可能为空; null 永远不会被归还
      抛出:
      IllegalArgumentException - 如果 id 不是 KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS、KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS、KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS 或 KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS 之一
      参见:
    • getCurrentFocusCycleRoot

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

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

      返回:
      当前焦点循环根,如果当前焦点循环根不是调用线程上下文的成员,则返回 null
      参见:
    • getGlobalCurrentFocusCycleRoot

      protected Container  getGlobalCurrentFocusCycleRoot() throws SecurityException
      返回当前焦点循环根,即使调用线程与当前焦点循环根处于不同的上下文中。如果焦点所有者本身是焦点循环根,那么在正常的焦点遍历期间,哪些 Components 代表要关注的下一个和前一个 Components 可能是不明确的。在那种情况下,当前焦点循环根用于区分可能性。
      返回:
      当前焦点循环根,如果当前焦点循环根不是调用线程上下文的成员,则返回 null
      抛出:
      SecurityException - 如果此 KeyboardFocusManager 不是调用线程上下文的当前 KeyboardFocusManager,并且调用线程没有“replaceKeyboardFocusManager”权限
      参见:
    • setGlobalCurrentFocusCycleRoot

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

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

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

      参数:
      newFocusCycleRoot - 新的焦点循环根
      抛出:
      SecurityException - 如果调用线程没有“replaceKeyboardFocusManager”权限
      参见:
    • addPropertyChangeListener

      public void addPropertyChangeListener(PropertyChangeListener  listener)
      将 PropertyChangeListener 添加到监听列表。监听已为此类的所有绑定属性注册,包括以下内容:
      • KeyboardFocusManager 当前是否正在管理此应用程序或小程序的浏览器上下文(“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

      public void removePropertyChangeListener(PropertyChangeListener  listener)
      从监听列表中删除 PropertyChangeListener。此方法应用于删除为此类的所有绑定属性注册的 PropertyChangeListeners。

      如果 listener 为 null,则不会抛出异常并且不会执行任何操作。

      参数:
      listener - 要删除的 PropertyChangeListener
      参见:
    • getPropertyChangeListeners

      public PropertyChangeListener [] getPropertyChangeListeners()
      返回在此键盘焦点管理器上注册的所有属性更改监听的数组。
      返回:
      所有这个键盘焦点管理器的 PropertyChangeListener s 或一个空数组,如果当前没有注册属性更改监听器
      自从:
      1.4
      参见:
    • addPropertyChangeListener

      public void addPropertyChangeListener(String  propertyName, PropertyChangeListener  listener)
      将 PropertyChangeListener 添加到特定属性的监听列表。指定的属性可以是用户定义的,也可以是以下之一:
      • KeyboardFocusManager 当前是否正在管理此应用程序或小程序的浏览器上下文(“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
      参见:
    • removePropertyChangeListener

      public void removePropertyChangeListener(String  propertyName, PropertyChangeListener  listener)
      从特定属性的监听列表中删除 PropertyChangeListener。此方法应用于删除为特定绑定属性注册的 PropertyChangeListeners。

      如果 listener 为 null,则不会抛出异常并且不会执行任何操作。

      参数:
      propertyName - 有效的属性名称
      listener - 要删除的 PropertyChangeListener
      参见:
    • getPropertyChangeListeners

      public PropertyChangeListener [] getPropertyChangeListeners(String  propertyName)
      返回与指定属性关联的所有 PropertyChangeListener 的数组。
      参数:
      propertyName - 属性名称
      返回:
      所有与命名属性关联的 PropertyChangeListener s,如果没有添加此类监听器,则为空数组。
      自从:
      1.4
      参见:
    • firePropertyChange

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

      public void addVetoableChangeListener(VetoableChangeListener  listener)
      将 VetoableChangeListener 添加到监听列表。监听已注册此类的所有可否决属性,包括以下内容:
      • 焦点所有者(“focusOwner”)
      • 永久焦点所有者(“permanentFocusOwner”)
      • 聚焦窗口(“focusedWindow”)
      • 活动窗口(“activeWindow”)
      如果 listener 为 null,则不会抛出异常并且不会执行任何操作。
      参数:
      listener - 要添加的 VetoableChangeListener
      参见:
    • removeVetoableChangeListener

      public void removeVetoableChangeListener(VetoableChangeListener  listener)
      从监听列表中删除 VetoableChangeListener。此方法应用于删除为此类的所有可否决属性注册的 VetoableChangeListeners。

      如果 listener 为 null,则不会抛出异常并且不会执行任何操作。

      参数:
      listener - 要删除的 VetoableChangeListener
      参见:
    • getVetoableChangeListeners

      public VetoableChangeListener [] getVetoableChangeListeners()
      返回在此键盘焦点管理器上注册的所有可否决更改监听的数组。
      返回:
      所有这个键盘焦点管理器的 VetoableChangeListener s 或一个空数组,如果当前没有注册可否决的更改监听器
      自从:
      1.4
      参见:
    • addVetoableChangeListener

      public void addVetoableChangeListener(String  propertyName, VetoableChangeListener  listener)
      将 VetoableChangeListener 添加到特定属性的监听列表。指定的属性可以是用户定义的,也可以是以下之一:
      • 焦点所有者(“focusOwner”)
      • 永久焦点所有者(“permanentFocusOwner”)
      • 聚焦窗口(“focusedWindow”)
      • 活动窗口(“activeWindow”)
      如果 listener 为 null,则不会抛出异常并且不会执行任何操作。
      参数:
      propertyName - 上面列出的属性名称之一
      listener - 要添加的 VetoableChangeListener
      参见:
    • removeVetoableChangeListener

      public void removeVetoableChangeListener(String  propertyName, VetoableChangeListener  listener)
      从特定属性的监听列表中删除 VetoableChangeListener。此方法应用于删除为特定绑定属性注册的 VetoableChangeListeners。

      如果 listener 为 null,则不会抛出异常并且不会执行任何操作。

      参数:
      propertyName - 有效的属性名称
      listener - 要删除的 VetoableChangeListener
      参见:
    • getVetoableChangeListeners

      public VetoableChangeListener [] getVetoableChangeListeners(String  propertyName)
      返回与指定属性关联的所有 VetoableChangeListener 的数组。
      参数:
      propertyName - 属性名称
      返回:
      所有与命名属性关联的 VetoableChangeListener s,如果没有添加此类监听器,则为空数组。
      自从:
      1.4
      参见:
    • 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 在最终调度 KeyEvent 本身之前调度用户生成的 KeyEvent。 KeyEventDispatchers 将按照添加的顺序收到通知。一旦一个 KeyEventDispatcher 从其 dispatchKeyEvent 方法返回 true,通知将立即停止。可以添加的 KeyEventDispatcher 的总数没有限制,也没有限制特定 KeyEventDispatcher 实例可以添加的次数。

      如果指定了 null 调度程序,则不执行任何操作并且不抛出异常。

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

      参数:
      dispatcher - 要添加到调度程序链的 KeyEventDispatcher
      参见:
    • removeKeyEventDispatcher

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

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

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

      参数:
      dispatcher - 要从调度程序链中删除的 KeyEventDispatcher
      参见:
    • getKeyEventDispatchers

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

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

      如果指定了 null 后处理器,则不执行任何操作并且不抛出异常。

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

      参数:
      processor - 添加到后处理器链的 KeyEventPostProcessor
      参见:
    • removeKeyEventPostProcessor

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

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

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

      参数:
      processor - 要从后处理器链中删除的 KeyEventPostProcessor
      参见:
    • getKeyEventPostProcessors

      protected List <KeyEventPostProcessor > getKeyEventPostProcessors()
      将此 KeyboardFocusManager 的 KeyEventPostProcessor 链作为列表返回。除非通过调用 addKeyEventPostProcessor 显式添加,否则列表将不包含此 KeyboardFocusManager。如果没有注册 KeyEventPostProcessors,实现可以自由返回 null 或长度为 0 的列表。客户端代码不应假定一种行为优于另一种行为,也不应假定该行为一旦建立就不会改变。
      返回:
      可能为 null 或空的 KeyEventPostProcessors 列表
      参见:
    • dispatchEvent

      public abstract boolean dispatchEvent(AWTEvent  e)
      此方法由 AWT 事件调度程序调用,请求当前的 KeyboardFocusManager 代表它调度指定的事件。预计所有 KeyboardFocusManagers 将调度所有 FocusEvents、所有与焦点相关的 WindowEvents 和所有 KeyEvents。这些事件应该根据 KeyboardFocusManager 的焦点所有者和焦点和活动窗口的概念来调度,有时会覆盖指定 AWTEvent 的源。必须使用 redispatchEvent 进行分派,以防止 AWT 事件分派器递归请求 KeyboardFocusManager 再次分派事件。如果此方法返回 false ,那么 AWT 事件分派器将尝试自己分派事件。
      参数:
      e - 要分派的 AWTEvent
      返回:
      true 如果此方法调度事件; false否则
      参见:
    • redispatchEvent

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

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

      参数:
      target - 应该将事件分派到的组件
      e - 要派发的事件
      参见:
    • dispatchKeyEvent

      public abstract boolean dispatchKeyEvent(KeyEvent  e)
      通常,如果调度程序链中没有其他 KeyEventDispatcher 调度 KeyEvent,或者没有注册其他 KeyEventDispatcher,dispatchEvent 将调用此方法。如果此方法的实现返回 falsedispatchEvent 可能会尝试调度 KeyEvent 本身,或者可能只是返回 false 。如果返回 truedispatchEvent 也应返回 true
      指定者:
      dispatchKeyEvent 在接口 KeyEventDispatcher
      参数:
      e - 当前 KeyboardFocusManager 请求此 KeyEventDispatcher 调度的 KeyEvent
      返回:
      true 如果调度了 KeyEvent; false否则
      参见:
    • postProcessKeyEvent

      public abstract boolean postProcessKeyEvent(KeyEvent  e)
      此方法将由 dispatchKeyEvent 调用。默认情况下,此方法将通过使用事件并激活快捷方式来处理映射到 AWT MenuShortcut 的任何未使用的 KeyEvent。
      指定者:
      postProcessKeyEvent 在接口 KeyEventPostProcessor
      参数:
      e - 要后处理的 KeyEvent
      返回:
      true 表示不会向其他 KeyEventPostProcessor 通知 KeyEvent。
      参见:
    • 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 它应该延迟调度 KeyEvents,直到指定的 Component 成为焦点所有者。如果客户端代码请求焦点更改,并且 AWT 确定本机窗口系统可能会批准此请求,那么 AWT 将调用此方法。 KeyboardFocusManager 有责任延迟分派时间戳晚于指定时间戳的 KeyEvent,直到指定组件接收到 FOCUS_GAINED 事件,或者 AWT 通过调用 dequeueKeyEventsdiscardKeyEvents 取消延迟请求。
      参数:
      after - 当前事件的时间戳,如果当前事件没有时间戳,则为当前系统时间,或者 AWT 无法确定当前正在处理哪个事件
      untilFocused - 应该在任何未决的 KeyEvents 之前接收 FOCUS_GAINED 事件的组件
      参见:
    • dequeueKeyEvents

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

      protected abstract void discardKeyEvents(Component  comp)
      由 AWT 调用以通知 KeyboardFocusManager 它应该取消 KeyEvents 的延迟调度。由于使用同一组件对 enqueueKeyEvents 进行一次或多次调用而排队的所有 KeyEvent 都应丢弃。
      参数:
      comp - 在对 enqueueKeyEvents 的一次或多次调用中指定的组件
      参见:
    • focusNextComponent

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

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

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

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

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

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

      public final void upFocusCycle()
      将焦点从当前焦点所有者向上移动一个焦点遍历周期。通常,新焦点所有者设置为当前焦点所有者的焦点循环根,而当前焦点循环根设置为新焦点所有者的焦点循环根。但是,如果当前焦点所有者的焦点循环根是 Window,则通常将焦点所有者设置为焦点循环根的默认 Component 以聚焦,并且当前焦点循环根不变。
    • downFocusCycle

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