- 所有已实现的接口:
KeyEventDispatcher,KeyEventPostProcessor
KeyboardFocusManager 既是客户端代码查询焦点所有者和启动焦点更改的集中位置,也是所有 FocusEvent、与焦点相关的 WindowEvent 和 KeyEvent 的事件调度程序。
一些浏览器将不同代码库中的小程序划分为不同的上下文,并在这些上下文之间建立隔离墙。在这种情况下,每个上下文将有一个 KeyboardFocusManager。其他浏览器将所有小程序置于相同的上下文中,这意味着所有小程序将只有一个全局的 KeyboardFocusManager。此行为依赖于实现。有关详细信息,请参阅浏览器的文档。然而,无论有多少上下文,每个 ClassLoader 都不会超过一个焦点所有者、焦点窗口或活动窗口。
- 自从:
- 1.4
- 参见:
-
字段摘要
字段修饰符和类型Field描述static final int向后焦点遍历键的标识符。static final intDown Cycle 焦点遍历键的标识符。static final int前向焦点遍历键的标识符。static final intUp Cycle 焦点遍历键的标识符。 -
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述voidaddKeyEventDispatcher(KeyEventDispatcher dispatcher) 将 KeyEventDispatcher 添加到此 KeyboardFocusManager 的调度程序链。voidaddKeyEventPostProcessor(KeyEventPostProcessor processor) 将 KeyEventPostProcessor 添加到此 KeyboardFocusManager 的后处理器链。void将 PropertyChangeListener 添加到监听列表。voidaddPropertyChangeListener(String propertyName, PropertyChangeListener listener) 将 PropertyChangeListener 添加到特定属性的监听列表。void将 VetoableChangeListener 添加到监听列表。voidaddVetoableChangeListener(String propertyName, VetoableChangeListener listener) 将 VetoableChangeListener 添加到特定属性的监听列表。void如果焦点所有者存在并且驻留在与调用线程相同的上下文中,则在 Java 和本机级别清除焦点所有者,否则该方法将静默返回。void在 Java 和本机级别清除全局焦点所有者。protected abstract voiddequeueKeyEvents(long after, Component untilFocused) 由 AWT 调用以通知 KeyboardFocusManager 它应该取消 KeyEvents 的延迟调度。protected abstract voiddiscardKeyEvents(Component comp) 由 AWT 调用以通知 KeyboardFocusManager 它应该取消 KeyEvents 的延迟调度。abstract boolean此方法由 AWT 事件调度程序调用,请求当前的 KeyboardFocusManager 代表它调度指定的事件。abstract boolean通常,如果调度程序链中没有其他 KeyEventDispatcher 调度 KeyEvent,或者没有注册其他 KeyEventDispatcher,dispatchEvent将调用此方法。final void将焦点从当前焦点所有者向下移动一个焦点遍历循环,当且仅当当前焦点所有者是作为焦点循环根的容器时。abstract voiddownFocusCycle(Container aContainer) 将焦点向下移动一个焦点遍历周期。protected abstract voidenqueueKeyEvents(long after, Component untilFocused) 由 AWT 调用以通知 KeyboardFocusManager 它应该延迟调度 KeyEvents,直到指定的 Component 成为焦点所有者。protected voidfirePropertyChange(String propertyName, Object oldValue, Object newValue) 触发 PropertyChangeEvent 以响应绑定属性的更改。protected voidfireVetoableChange(String propertyName, Object oldValue, Object newValue) 触发 PropertyChangeEvent 以响应可否决属性的更改。final void在当前焦点所有者之后聚焦 Component。abstract voidfocusNextComponent(Component aComponent) 在 aComponent 之后聚焦 Component,通常基于 FocusTraversalPolicy。final void在当前焦点所有者之前聚焦 Component。abstract voidfocusPreviousComponent(Component aComponent) 在组件之前聚焦组件,通常基于 FocusTraversalPolicy。如果活动窗口与调用线程处于同一上下文中,则返回活动窗口。如果当前焦点循环根与调用线程在同一上下文中,则返回当前焦点循环根。static KeyboardFocusManager返回调用线程上下文的当前 KeyboardFocusManager 实例。getDefaultFocusTraversalKeys(int id) 为给定的遍历操作返回一组默认的焦点遍历键。返回默认的 FocusTraversalPolicy。如果聚焦窗口与调用线程处于同一上下文中,则返回聚焦窗口。如果焦点所有者与调用线程处于同一上下文中,则返回焦点所有者。protected Window返回活动窗口,即使调用线程与活动窗口处于不同的上下文中。protected Container返回当前焦点循环根,即使调用线程与当前焦点循环根处于不同的上下文中。protected Window返回焦点窗口,即使调用线程与焦点窗口处于不同的上下文中也是如此。protected Component返回焦点所有者,即使调用线程与焦点所有者处于不同的上下文中也是如此。protected Component返回永久焦点所有者,即使调用线程与永久焦点所有者处于不同的上下文中也是如此。protected List<KeyEventDispatcher>将此 KeyboardFocusManager 的 KeyEventDispatcher 链作为列表返回。protected List<KeyEventPostProcessor>将此 KeyboardFocusManager 的 KeyEventPostProcessor 链作为列表返回。如果永久焦点所有者与调用线程处于同一上下文中,则返回永久焦点所有者。返回在此键盘焦点管理器上注册的所有属性更改监听的数组。getPropertyChangeListeners(String propertyName) 返回与指定属性关联的所有PropertyChangeListener的数组。返回在此键盘焦点管理器上注册的所有可否决更改监听的数组。getVetoableChangeListeners(String propertyName) 返回与指定属性关联的所有VetoableChangeListener的数组。abstract boolean此方法将由dispatchKeyEvent调用。abstract voidprocessKeyEvent(Component focusedComponent, KeyEvent e) 当且仅当 KeyEvent 表示指定 focusedComponent 的焦点遍历键时,此方法才启动焦点遍历操作。final voidredispatchEvent(Component target, AWTEvent e) 以 AWT 事件分派器不会递归地请求 KeyboardFocusManager 或任何已安装的 KeyEventDispatchers 再次分派事件的方式重新分派 AWTEvent。voidremoveKeyEventDispatcher(KeyEventDispatcher dispatcher) 删除之前添加到此 KeyboardFocusManager 的调度程序链中的 KeyEventDispatcher。voidremoveKeyEventPostProcessor(KeyEventPostProcessor processor) 从此 KeyboardFocusManager 的后处理器链中移除先前添加的 KeyEventPostProcessor。void从监听列表中删除 PropertyChangeListener。voidremovePropertyChangeListener(String propertyName, PropertyChangeListener listener) 从特定属性的监听列表中删除 PropertyChangeListener。void从监听列表中删除 VetoableChangeListener。voidremoveVetoableChangeListener(String propertyName, VetoableChangeListener listener) 从特定属性的监听列表中删除 VetoableChangeListener。static voidsetCurrentKeyboardFocusManager(KeyboardFocusManager newManager) 为调用线程的上下文设置当前的 KeyboardFocusManager 实例。voidsetDefaultFocusTraversalKeys(int id, Set<? extends AWTKeyStroke> keystrokes) 为给定的遍历操作设置默认的焦点遍历键。voidsetDefaultFocusTraversalPolicy(FocusTraversalPolicy defaultPolicy) 设置默认的 FocusTraversalPolicy。protected voidsetGlobalActiveWindow(Window activeWindow) 设置活动窗口。voidsetGlobalCurrentFocusCycleRoot(Container newFocusCycleRoot) 设置当前焦点循环根。protected voidsetGlobalFocusedWindow(Window focusedWindow) 设置焦点窗口。protected voidsetGlobalFocusOwner(Component focusOwner) 设置焦点所有者。protected voidsetGlobalPermanentFocusOwner(Component permanentFocusOwner) 设置永久焦点所有者。final void将焦点从当前焦点所有者向上移动一个焦点遍历周期。abstract voidupFocusCycle(Component aComponent) 将焦点向上移动一个焦点遍历周期。
-
字段详细信息
-
FORWARD_TRAVERSAL_KEYS
public static final int FORWARD_TRAVERSAL_KEYS前向焦点遍历键的标识符。- 参见:
-
BACKWARD_TRAVERSAL_KEYS
public static final int BACKWARD_TRAVERSAL_KEYS向后焦点遍历键的标识符。- 参见:
-
UP_CYCLE_TRAVERSAL_KEYS
public static final int UP_CYCLE_TRAVERSAL_KEYSUp Cycle 焦点遍历键的标识符。- 参见:
-
DOWN_CYCLE_TRAVERSAL_KEYS
public static final int DOWN_CYCLE_TRAVERSAL_KEYSDown Cycle 焦点遍历键的标识符。- 参见:
-
-
构造方法详细信息
-
KeyboardFocusManager
public KeyboardFocusManager()初始化 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
如果焦点所有者与调用线程处于同一上下文中,则返回焦点所有者。焦点所有者被定义为应用程序中的组件,它通常会接收用户生成的所有 KeyEvent。如果为焦点所有者启用了焦点遍历键,则不会传递映射到焦点所有者的焦点遍历键的 KeyEvents。此外,KeyEventDispatchers 可能会在 KeyEvent 到达焦点所有者之前重新定位或使用它们。- 返回:
- 焦点所有者,如果焦点所有者不是调用线程上下文的成员,则为 null
- 参见:
-
getGlobalFocusOwner
返回焦点所有者,即使调用线程与焦点所有者处于不同的上下文中也是如此。焦点所有者被定义为应用程序中的组件,它通常会接收用户生成的所有 KeyEvent。如果为焦点所有者启用了焦点遍历键,则不会传递映射到焦点所有者的焦点遍历键的 KeyEvents。此外,KeyEventDispatchers 可能会在 KeyEvent 到达焦点所有者之前重新定位或使用它们。如果此 KeyboardFocusManager 不是调用线程上下文的当前 KeyboardFocusManager,则此方法将抛出 SecurityException。
- 返回:
- 焦点所有者
- 抛出:
SecurityException- 如果此 KeyboardFocusManager 不是调用线程上下文的当前 KeyboardFocusManager,并且调用线程没有“replaceKeyboardFocusManager”权限- 参见:
-
setGlobalFocusOwner
设置焦点所有者。如果 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
在 Java 和本机级别清除全局焦点所有者。如果存在焦点所有者,则该组件将收到一个永久性的 FOCUS_LOST 事件。此操作完成后,本机窗口系统将丢弃所有用户生成的 KeyEvent,直到用户选择一个新的组件来接收焦点,或者通过调用requestFocus()显式地为组件提供焦点。此操作不会更改获得焦点或活动的窗口。如果安装了 SecurityManager,则调用线程必须被授予“replaceKeyboardFocusManager”AWTPermission。如果未授予此权限,此方法将抛出 SecurityException,并且不会清除当前焦点所有者。
此方法仅供 KeyboardFocusManager 设置为调用线程上下文的当前 KeyboardFocusManager 使用。它不适合一般客户使用。
- 抛出:
SecurityException- 如果调用线程没有“replaceKeyboardFocusManager”权限- 参见:
-
getPermanentFocusOwner
如果永久焦点所有者与调用线程处于同一上下文中,则返回永久焦点所有者。永久焦点所有者定义为应用程序中接收永久 FOCUS_GAINED 事件的最后一个组件。焦点所有者和永久焦点所有者是等效的,除非临时焦点更改当前生效。在这种情况下,永久焦点所有者将在临时焦点更改结束时再次成为焦点所有者。- 返回:
- 永久焦点所有者,如果永久焦点所有者不是调用线程上下文的成员,则返回 null
- 参见:
-
getGlobalPermanentFocusOwner
返回永久焦点所有者,即使调用线程与永久焦点所有者处于不同的上下文中也是如此。永久焦点所有者定义为应用程序中接收永久 FOCUS_GAINED 事件的最后一个组件。焦点所有者和永久焦点所有者是等效的,除非临时焦点更改当前生效。在这种情况下,永久焦点所有者将在临时焦点更改结束时再次成为焦点所有者。- 返回:
- 永久焦点所有者
- 抛出:
SecurityException- 如果此 KeyboardFocusManager 不是调用线程上下文的当前 KeyboardFocusManager,并且调用线程没有“replaceKeyboardFocusManager”权限- 参见:
-
setGlobalPermanentFocusOwner
设置永久焦点所有者。如果 Component 不可聚焦,则操作将被取消。永久焦点所有者定义为应用程序中接收永久 FOCUS_GAINED 事件的最后一个组件。焦点所有者和永久焦点所有者是等效的,除非临时焦点更改当前生效。在这种情况下,永久焦点所有者将在临时焦点更改结束时再次成为焦点所有者。该方法实际上并没有将焦点设置到指定的 Component。它仅存储随后由
getPermanentFocusOwner()返回的值。使用Component.requestFocus()或Component.requestFocusInWindow()更改焦点所有者,受平台限制。- 参数:
permanentFocusOwner- 永久焦点所有者- 抛出:
SecurityException- 如果此 KeyboardFocusManager 不是调用线程上下文的当前 KeyboardFocusManager,并且调用线程没有“replaceKeyboardFocusManager”权限- 参见:
-
getFocusedWindow
如果聚焦窗口与调用线程处于同一上下文中,则返回聚焦窗口。获得焦点的 Window 是属于或包含焦点所有者的 Window。- 返回:
- 聚焦窗口,如果聚焦窗口不是调用线程上下文的成员,则返回 null
- 参见:
-
getGlobalFocusedWindow
返回焦点窗口,即使调用线程与焦点窗口处于不同的上下文中也是如此。获得焦点的 Window 是属于或包含焦点所有者的 Window。- 返回:
- 焦点窗口
- 抛出:
SecurityException- 如果此 KeyboardFocusManager 不是调用线程上下文的当前 KeyboardFocusManager,并且调用线程没有“replaceKeyboardFocusManager”权限- 参见:
-
setGlobalFocusedWindow
设置焦点窗口。获得焦点的 Window 是属于或包含焦点所有者的 Window。如果要聚焦的指定窗口不是可聚焦窗口,则该操作将被取消。就本机窗口系统而言,此方法实际上不会更改焦点窗口。它仅存储随后由
getFocusedWindow()返回的值。使用Component.requestFocus()或Component.requestFocusInWindow()更改焦点窗口,受平台限制。- 参数:
focusedWindow- 聚焦窗口- 抛出:
SecurityException- 如果此 KeyboardFocusManager 不是调用线程上下文的当前 KeyboardFocusManager,并且调用线程没有“replaceKeyboardFocusManager”权限- 参见:
-
getActiveWindow
如果活动窗口与调用线程处于同一上下文中,则返回活动窗口。只有 Frame 或 Dialog 可以是活动窗口。本机窗口系统可以用特殊装饰表示活动窗口或其子窗口,例如突出显示的标题栏。活动窗口始终是焦点窗口,或者是焦点窗口所有者的第一个框架或对话框。- 返回:
- 活动窗口,如果活动窗口不是调用线程上下文的成员,则返回 null
- 参见:
-
getGlobalActiveWindow
返回活动窗口,即使调用线程与活动窗口处于不同的上下文中。只有 Frame 或 Dialog 可以是活动窗口。本机窗口系统可以用特殊装饰表示活动窗口或其子窗口,例如突出显示的标题栏。活动窗口始终是焦点窗口,或者是焦点窗口所有者的第一个框架或对话框。- 返回:
- 活动窗口
- 抛出:
SecurityException- 如果此 KeyboardFocusManager 不是调用线程上下文的当前 KeyboardFocusManager,并且调用线程没有“replaceKeyboardFocusManager”权限- 参见:
-
setGlobalActiveWindow
设置活动窗口。只有 Frame 或 Dialog 可以是活动窗口。本机窗口系统可以用特殊装饰表示活动窗口或其子窗口,例如突出显示的标题栏。活动窗口始终是焦点窗口,或者是焦点窗口所有者的第一个框架或对话框。就本机窗口系统而言,此方法实际上不会更改活动窗口。它仅存储随后由
getActiveWindow()返回的值。使用Component.requestFocus()或Component.requestFocusInWindow()更改活动窗口,受平台限制。- 参数:
activeWindow- 活动窗口- 抛出:
SecurityException- 如果此 KeyboardFocusManager 不是调用线程上下文的当前 KeyboardFocusManager,并且调用线程没有“replaceKeyboardFocusManager”权限- 参见:
-
getDefaultFocusTraversalPolicy
返回默认的 FocusTraversalPolicy。顶级组件在创建时使用此值通过显式调用 Container.setFocusTraversalPolicy 来初始化自己的焦点遍历策略。- 返回:
- 默认的 FocusTraversalPolicy。永远不会返回 null。
- 参见:
-
setDefaultFocusTraversalPolicy
设置默认的 FocusTraversalPolicy。顶级组件在创建时使用此值通过显式调用 Container.setFocusTraversalPolicy 来初始化自己的焦点遍历策略。注意:此调用不会影响已创建的组件,因为它们已初始化策略。只有新组件才会使用此策略作为它们的默认策略。- 参数:
defaultPolicy- 新的默认 FocusTraversalPolicy- 抛出:
IllegalArgumentException- 如果 defaultPolicy 为空- 参见:
-
setDefaultFocusTraversalKeys
为给定的遍历操作设置默认的焦点遍历键。这个遍历键Set将对所有没有自己明确定义的Set的Window有效。这个Set也将被那些Windows的任何孩子Component递归继承,而这些Set没有自己明确定义的Set。默认焦点遍历键的默认值是依赖于实现的。 Sun 建议特定本机平台的所有实现都使用相同的默认值。下面列出了针对 Windows 和 Unix 的建议。这些建议用于 Sun AWT 实现。
要禁用遍历键,请使用空的焦点遍历键的推荐默认值 Identifier 意义 默认 KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS正常的正向键盘遍历 TAB在KEY_PRESSED上,CTRL-TAB在KEY_PRESSED上KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS正常反向键盘遍历 SHIFT-TAB在KEY_PRESSED上,CTRL-SHIFT-TAB在KEY_PRESSED上KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS上一个焦点遍历循环 没有任何 KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS向下一个焦点遍历循环 没有任何 Set;推荐Collections.EMPTY_SET。使用
AWTKeyStrokeAPI,客户端代码可以指定两个特定的KeyEvent、KEY_PRESSED或KEY_RELEASED中的哪一个,将发生焦点遍历操作。然而,无论指定哪个KeyEvent,所有与焦点遍历键相关的KeyEvents,包括关联的KEY_TYPED事件,都将被消耗,并且不会被派发给任何Component。将KEY_TYPED事件指定为映射到焦点遍历操作,或将同一事件映射到多个默认焦点遍历操作是运行时错误。如果
keystrokes中的任何Object不是AWTKeyStroke,此方法可能会抛出ClassCastException。- 参数:
id-KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS、KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS、KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS或KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS之一keystrokes- 指定操作的AWTKeyStroke集合- 抛出:
IllegalArgumentException- 如果 id 不是KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS、KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS、KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS或KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS之一,或者如果击键是null,或者如果击键包含null,或者如果任何击键代表一个KEY_TYPED事件,或者如果任何击键已经映射到另一个默认的焦点遍历操作- 参见:
-
getDefaultFocusTraversalKeys
为给定的遍历操作返回一组默认的焦点遍历键。这个遍历键集将对所有没有明确定义自己的 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 之一- 返回:
-
指定操作的
AWTKeyStroke的Set;Set将不可修改,并且可能为空;null永远不会被归还 - 抛出:
IllegalArgumentException- 如果 id 不是 KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS、KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS、KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS 或 KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS 之一- 参见:
-
getCurrentFocusCycleRoot
如果当前焦点循环根与调用线程在同一上下文中,则返回当前焦点循环根。如果焦点所有者本身是焦点循环根,那么在正常的焦点遍历期间,哪些 Components 代表要关注的下一个和前一个 Components 可能是不明确的。在那种情况下,当前焦点循环根用于区分可能性。此方法仅供 KeyboardFocusManagers 和焦点实现使用。它不适合一般客户使用。
- 返回:
- 当前焦点循环根,如果当前焦点循环根不是调用线程上下文的成员,则返回 null
- 参见:
-
getGlobalCurrentFocusCycleRoot
返回当前焦点循环根,即使调用线程与当前焦点循环根处于不同的上下文中。如果焦点所有者本身是焦点循环根,那么在正常的焦点遍历期间,哪些 Components 代表要关注的下一个和前一个 Components 可能是不明确的。在那种情况下,当前焦点循环根用于区分可能性。- 返回:
- 当前焦点循环根,如果当前焦点循环根不是调用线程上下文的成员,则返回 null
- 抛出:
SecurityException- 如果此 KeyboardFocusManager 不是调用线程上下文的当前 KeyboardFocusManager,并且调用线程没有“replaceKeyboardFocusManager”权限- 参见:
-
setGlobalCurrentFocusCycleRoot
设置当前焦点循环根。如果焦点所有者本身是焦点循环根,那么在正常的焦点遍历期间,哪些 Components 代表要关注的下一个和前一个 Components 可能是不明确的。在那种情况下,当前焦点循环根用于区分可能性。如果安装了 SecurityManager,则调用线程必须被授予“replaceKeyboardFocusManager”AWTPermission。如果未授予此权限,此方法将抛出 SecurityException,并且不会更改当前焦点循环根。
此方法仅供 KeyboardFocusManagers 和焦点实现使用。它不适合一般客户使用。
- 参数:
newFocusCycleRoot- 新的焦点循环根- 抛出:
SecurityException- 如果调用线程没有“replaceKeyboardFocusManager”权限- 参见:
-
addPropertyChangeListener
将 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- 要添加的 PropertyChangeListener- 参见:
-
removePropertyChangeListener
从监听列表中删除 PropertyChangeListener。此方法应用于删除为此类的所有绑定属性注册的 PropertyChangeListeners。如果 listener 为 null,则不会抛出异常并且不会执行任何操作。
- 参数:
listener- 要删除的 PropertyChangeListener- 参见:
-
getPropertyChangeListeners
返回在此键盘焦点管理器上注册的所有属性更改监听的数组。- 返回:
-
所有这个键盘焦点管理器的
PropertyChangeListeners 或一个空数组,如果当前没有注册属性更改监听器 - 自从:
- 1.4
- 参见:
-
addPropertyChangeListener
将 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”)
- 参数:
propertyName- 上面列出的属性名称之一listener- 要添加的 PropertyChangeListener- 参见:
-
removePropertyChangeListener
从特定属性的监听列表中删除 PropertyChangeListener。此方法应用于删除为特定绑定属性注册的 PropertyChangeListeners。如果 listener 为 null,则不会抛出异常并且不会执行任何操作。
- 参数:
propertyName- 有效的属性名称listener- 要删除的 PropertyChangeListener- 参见:
-
getPropertyChangeListeners
返回与指定属性关联的所有PropertyChangeListener的数组。- 参数:
propertyName- 属性名称- 返回:
-
所有与命名属性关联的
PropertyChangeListeners,如果没有添加此类监听器,则为空数组。 - 自从:
- 1.4
- 参见:
-
firePropertyChange
触发 PropertyChangeEvent 以响应绑定属性的更改。该事件将传递给所有已注册的 PropertyChangeListeners。如果 oldValue 和 newValue 相同,则不会传递任何事件。- 参数:
propertyName- 已更改的属性的名称oldValue- 属性的先前值newValue- 属性的新值
-
addVetoableChangeListener
将 VetoableChangeListener 添加到监听列表。监听已注册此类的所有可否决属性,包括以下内容:- 焦点所有者(“focusOwner”)
- 永久焦点所有者(“permanentFocusOwner”)
- 聚焦窗口(“focusedWindow”)
- 活动窗口(“activeWindow”)
- 参数:
listener- 要添加的 VetoableChangeListener- 参见:
-
removeVetoableChangeListener
从监听列表中删除 VetoableChangeListener。此方法应用于删除为此类的所有可否决属性注册的 VetoableChangeListeners。如果 listener 为 null,则不会抛出异常并且不会执行任何操作。
- 参数:
listener- 要删除的 VetoableChangeListener- 参见:
-
getVetoableChangeListeners
返回在此键盘焦点管理器上注册的所有可否决更改监听的数组。- 返回:
-
所有这个键盘焦点管理器的
VetoableChangeListeners 或一个空数组,如果当前没有注册可否决的更改监听器 - 自从:
- 1.4
- 参见:
-
addVetoableChangeListener
将 VetoableChangeListener 添加到特定属性的监听列表。指定的属性可以是用户定义的,也可以是以下之一:- 焦点所有者(“focusOwner”)
- 永久焦点所有者(“permanentFocusOwner”)
- 聚焦窗口(“focusedWindow”)
- 活动窗口(“activeWindow”)
- 参数:
propertyName- 上面列出的属性名称之一listener- 要添加的 VetoableChangeListener- 参见:
-
removeVetoableChangeListener
从特定属性的监听列表中删除 VetoableChangeListener。此方法应用于删除为特定绑定属性注册的 VetoableChangeListeners。如果 listener 为 null,则不会抛出异常并且不会执行任何操作。
- 参数:
propertyName- 有效的属性名称listener- 要删除的 VetoableChangeListener- 参见:
-
getVetoableChangeListeners
返回与指定属性关联的所有VetoableChangeListener的数组。- 参数:
propertyName- 属性名称- 返回:
-
所有与命名属性关联的
VetoableChangeListeners,如果没有添加此类监听器,则为空数组。 - 自从:
- 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
将 KeyEventDispatcher 添加到此 KeyboardFocusManager 的调度程序链。此 KeyboardFocusManager 将请求每个 KeyEventDispatcher 在最终调度 KeyEvent 本身之前调度用户生成的 KeyEvent。 KeyEventDispatchers 将按照添加的顺序收到通知。一旦一个 KeyEventDispatcher 从其dispatchKeyEvent方法返回true,通知将立即停止。可以添加的 KeyEventDispatcher 的总数没有限制,也没有限制特定 KeyEventDispatcher 实例可以添加的次数。如果指定了 null 调度程序,则不执行任何操作并且不抛出异常。
在多线程应用程序中,
KeyEventDispatcher的行为与其他 AWT 监听器相同。有关详细信息,请参阅 AWT 线程问题。- 参数:
dispatcher- 要添加到调度程序链的 KeyEventDispatcher- 参见:
-
removeKeyEventDispatcher
删除之前添加到此 KeyboardFocusManager 的调度程序链中的 KeyEventDispatcher。这个 KeyboardFocusManager 本身不能被删除,除非它是通过调用addKeyEventDispatcher明确重新注册的。如果指定了 null 调度程序,如果指定的调度程序不在调度程序链中,或者如果指定了此 KeyboardFocusManager 而未明确重新注册,则不执行任何操作,也不会引发异常。
在多线程应用程序中,
KeyEventDispatcher的行为与其他 AWT 监听器相同。有关详细信息,请参阅 AWT 线程问题。- 参数:
dispatcher- 要从调度程序链中删除的 KeyEventDispatcher- 参见:
-
getKeyEventDispatchers
将此 KeyboardFocusManager 的 KeyEventDispatcher 链作为列表返回。除非通过调用addKeyEventDispatcher显式重新注册,否则列表将不包含此 KeyboardFocusManager。如果没有注册其他 KeyEventDispatcher,实现可以自由返回 null 或长度为 0 的列表。客户端代码不应假定一种行为优于另一种行为,也不应假定该行为一旦建立就不会改变。- 返回:
- 可能为 null 或空的 KeyEventDispatchers 列表
- 参见:
-
addKeyEventPostProcessor
将 KeyEventPostProcessor 添加到此 KeyboardFocusManager 的后处理器链。在将 KeyEvent 分派到其目标并由其处理后,KeyboardFocusManager 将请求每个 KeyEventPostProcessor 执行任何必要的后处理,作为 KeyEvent 最终解决方案的一部分。 KeyEventPostProcessors 将按照添加的顺序收到通知;当前的 KeyboardFocusManager 将最后得到通知。一旦一个 KeyEventPostProcessor 从其postProcessKeyEvent方法返回true,通知将立即停止。可以添加的 KeyEventPostProcessor 总数没有限制,特定 KeyEventPostProcessor 实例可以添加的次数也没有限制。如果指定了 null 后处理器,则不执行任何操作并且不抛出异常。
在多线程应用程序中,
KeyEventPostProcessor的行为与其他 AWT 监听器相同。有关详细信息,请参阅 AWT 线程问题。- 参数:
processor- 添加到后处理器链的 KeyEventPostProcessor- 参见:
-
removeKeyEventPostProcessor
从此 KeyboardFocusManager 的后处理器链中移除先前添加的 KeyEventPostProcessor。此 KeyboardFocusManager 本身不能完全从链中删除。只能删除通过addKeyEventPostProcessor添加的其他引用。如果指定了 null 后处理器,如果指定的后处理器不在后处理器链中,或者如果指定了此 KeyboardFocusManager 而未明确添加,则不执行任何操作,也不会引发异常。
在多线程应用程序中,
KeyEventPostProcessor的行为与其他 AWT 监听器相同。有关详细信息,请参阅 AWT 线程问题。- 参数:
processor- 要从后处理器链中删除的 KeyEventPostProcessor- 参见:
-
getKeyEventPostProcessors
将此 KeyboardFocusManager 的 KeyEventPostProcessor 链作为列表返回。除非通过调用addKeyEventPostProcessor显式添加,否则列表将不包含此 KeyboardFocusManager。如果没有注册 KeyEventPostProcessors,实现可以自由返回 null 或长度为 0 的列表。客户端代码不应假定一种行为优于另一种行为,也不应假定该行为一旦建立就不会改变。- 返回:
- 可能为 null 或空的 KeyEventPostProcessors 列表
- 参见:
-
dispatchEvent
此方法由 AWT 事件调度程序调用,请求当前的 KeyboardFocusManager 代表它调度指定的事件。预计所有 KeyboardFocusManagers 将调度所有 FocusEvents、所有与焦点相关的 WindowEvents 和所有 KeyEvents。这些事件应该根据 KeyboardFocusManager 的焦点所有者和焦点和活动窗口的概念来调度,有时会覆盖指定 AWTEvent 的源。必须使用redispatchEvent进行分派,以防止 AWT 事件分派器递归请求 KeyboardFocusManager 再次分派事件。如果此方法返回false,那么 AWT 事件分派器将尝试自己分派事件。- 参数:
e- 要分派的 AWTEvent- 返回:
true如果此方法调度事件;false否则- 参见:
-
redispatchEvent
以 AWT 事件分派器不会递归地请求 KeyboardFocusManager 或任何已安装的 KeyEventDispatchers 再次分派事件的方式重新分派 AWTEvent。dispatchEvent和客户端定义的 KeyEventDispatchers 的客户端实现必须调用redispatchEvent(target, e)而不是target.dispatchEvent(e)来调度事件。此方法仅供 KeyboardFocusManagers 和 KeyEventDispatchers 使用。它不适合一般客户使用。
- 参数:
target- 应该将事件分派到的组件e- 要派发的事件- 参见:
-
dispatchKeyEvent
通常,如果调度程序链中没有其他 KeyEventDispatcher 调度 KeyEvent,或者没有注册其他 KeyEventDispatcher,dispatchEvent将调用此方法。如果此方法的实现返回false,dispatchEvent可能会尝试调度 KeyEvent 本身,或者可能只是返回false。如果返回true,dispatchEvent也应返回true。- 指定者:
dispatchKeyEvent在接口KeyEventDispatcher中- 参数:
e- 当前 KeyboardFocusManager 请求此 KeyEventDispatcher 调度的 KeyEvent- 返回:
true如果调度了 KeyEvent;false否则- 参见:
-
postProcessKeyEvent
此方法将由dispatchKeyEvent调用。默认情况下,此方法将通过使用事件并激活快捷方式来处理映射到 AWTMenuShortcut的任何未使用的 KeyEvent。- 指定者:
postProcessKeyEvent在接口KeyEventPostProcessor中- 参数:
e- 要后处理的 KeyEvent- 返回:
true表示不会向其他 KeyEventPostProcessor 通知 KeyEvent。- 参见:
-
processKeyEvent
当且仅当 KeyEvent 表示指定 focusedComponent 的焦点遍历键时,此方法才启动焦点遍历操作。预计 focusedComponent 是当前的焦点所有者,尽管情况不一定如此。如果不是,则焦点遍历仍将继续进行,就好像 focusedComponent 是当前焦点所有者一样。- 参数:
focusedComponent- 如果指定事件表示组件的焦点遍历键,则该组件将成为焦点遍历操作的基础e- 可能表示焦点遍历键的事件
-
enqueueKeyEvents
由 AWT 调用以通知 KeyboardFocusManager 它应该延迟调度 KeyEvents,直到指定的 Component 成为焦点所有者。如果客户端代码请求焦点更改,并且 AWT 确定本机窗口系统可能会批准此请求,那么 AWT 将调用此方法。 KeyboardFocusManager 有责任延迟分派时间戳晚于指定时间戳的 KeyEvent,直到指定组件接收到 FOCUS_GAINED 事件,或者 AWT 通过调用dequeueKeyEvents或discardKeyEvents取消延迟请求。- 参数:
after- 当前事件的时间戳,如果当前事件没有时间戳,则为当前系统时间,或者 AWT 无法确定当前正在处理哪个事件untilFocused- 应该在任何未决的 KeyEvents 之前接收 FOCUS_GAINED 事件的组件- 参见:
-
dequeueKeyEvents
由 AWT 调用以通知 KeyboardFocusManager 它应该取消 KeyEvents 的延迟调度。由于调用具有相同时间戳和组件的enqueueKeyEvents而排入队列的所有 KeyEvent 都应释放,以便正常分派给当前焦点所有者。如果给定时间戳小于零,则给定组件的未完成排队请求最老的时间戳(如果有的话)应该被取消。- 参数:
after- 在对enqueueKeyEvents的调用中指定的时间戳,或任何 < 0 的值untilFocused- 在对enqueueKeyEvents的调用中指定的组件- 参见:
-
discardKeyEvents
由 AWT 调用以通知 KeyboardFocusManager 它应该取消 KeyEvents 的延迟调度。由于使用同一组件对enqueueKeyEvents进行一次或多次调用而排队的所有 KeyEvent 都应丢弃。- 参数:
comp- 在对enqueueKeyEvents的一次或多次调用中指定的组件- 参见:
-
focusNextComponent
在 aComponent 之后聚焦 Component,通常基于 FocusTraversalPolicy。- 参数:
aComponent- 作为焦点遍历操作基础的 Component- 参见:
-
focusPreviousComponent
在组件之前聚焦组件,通常基于 FocusTraversalPolicy。- 参数:
aComponent- 作为焦点遍历操作基础的 Component- 参见:
-
upFocusCycle
将焦点向上移动一个焦点遍历周期。通常,焦点所有者设置为组件的焦点循环根,当前焦点循环根设置为新焦点所有者的焦点循环根。但是,如果 aComponent 的焦点循环根是一个 Window,则通常将焦点所有者设置为要聚焦的 Window 的默认 Component,并且当前焦点循环根保持不变。- 参数:
aComponent- 作为焦点遍历操作基础的 Component
-
downFocusCycle
将焦点向下移动一个焦点遍历周期。通常,如果 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()将焦点从当前焦点所有者向下移动一个焦点遍历循环,当且仅当当前焦点所有者是作为焦点循环根的容器时。通常,焦点所有者设置为当前焦点所有者的默认要聚焦的组件,当前焦点循环根设置为当前焦点所有者。如果当前焦点所有者不是作为焦点循环根的容器,则不会发生焦点遍历操作。
-