- 所有已实现的接口:
-
KeyEventDispatcher
,KeyEventPostProcessor
- 直接已知的子类:
-
DefaultKeyboardFocusManager
键盘焦点管理器既是客户端代码查询焦点所有者和启动焦点更改的集中位置,也是所有与焦点相关的FocusEvents、与焦点相关的WindowEvents和KeyEvents的事件分发器。
某些浏览器将不同代码库中的小程序分隔到不同的上下文中,并在这些上下文之间建立隔离墙。在这种情况下,每个上下文将有一个键盘焦点管理器。其他浏览器将所有小程序放入同一个上下文中,这意味着所有小程序将只有一个全局键盘焦点管理器。这种行为取决于实现。有关更多信息,请参阅浏览器的文档。无论可能存在多少上下文,每个类加载器永远不会有多个焦点所有者、焦点窗口或活动窗口。
- 自 JDK 版本:
- 1.4
- 另请参见:
-
Field Summary
Modifier and TypeFieldDescriptionstatic final int
后向焦点遍历键的标识符。static final int
向下循环焦点遍历键的标识符。static final int
前向焦点遍历键的标识符。static final int
向上循环焦点遍历键的标识符。 -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
addKeyEventDispatcher
(KeyEventDispatcher dispatcher) 将KeyEventDispatcher添加到此键盘焦点管理器的分发器链中。void
addKeyEventPostProcessor
(KeyEventPostProcessor processor) 将KeyEventPostProcessor添加到此键盘焦点管理器的后处理器链中。void
将PropertyChangeListener添加到监听器列表中。void
addPropertyChangeListener
(String propertyName, PropertyChangeListener listener) 将PropertyChangeListener添加到特定属性的监听器列表中。void
将VetoableChangeListener添加到监听器列表中。void
addVetoableChangeListener
(String propertyName, VetoableChangeListener listener) 将VetoableChangeListener添加到特定属性的监听器列表中。void
如果焦点所有者存在且与调用线程位于相同上下文中,则在Java和本地级别清除焦点所有者,否则方法将静默返回。void
在Java和本地级别清除全局焦点所有者。protected abstract void
dequeueKeyEvents
(long after, Component untilFocused) AWT调用此方法通知键盘焦点管理器应取消延迟分派KeyEvents。protected abstract void
discardKeyEvents
(Component comp) AWT调用此方法通知键盘焦点管理器应取消延迟分派KeyEvents。abstract boolean
AWT事件分发器调用此方法,请求当前键盘焦点管理器代表其分派指定事件。abstract boolean
如果没有其他分发器链中的KeyEventDispatcher分派了KeyEvent,或者没有其他KeyEventDispatchers注册,则通常由dispatchEvent
调用此方法。final void
如果当前焦点所有者是焦点循环根容器,则将焦点向下移动一个焦点遍历周期。abstract void
downFocusCycle
(Container aContainer) 将焦点向下移动一个焦点遍历周期。protected abstract void
enqueueKeyEvents
(long after, Component untilFocused) AWT调用此方法通知键盘焦点管理器应延迟分派KeyEvents,直到指定组件成为焦点所有者。protected void
firePropertyChange
(String propertyName, Object oldValue, Object newValue) 响应绑定属性的更改,触发PropertyChangeEvent。protected void
fireVetoableChange
(String propertyName, Object oldValue, Object newValue) 响应可否决属性的更改,触发PropertyChangeEvent。final void
将焦点设置在当前焦点所有者之后的组件。abstract void
focusNextComponent
(Component aComponent) 将焦点设置在aComponent之后的组件,通常基于FocusTraversalPolicy。final void
将焦点设置在当前焦点所有者之前的组件。abstract void
focusPreviousComponent
(Component aComponent) 将焦点设置在aComponent之前的组件,通常基于FocusTraversalPolicy。返回活动窗口,如果活动窗口与调用线程位于相同上下文中。返回当前焦点循环根容器,如果当前焦点循环根容器与调用线程位于相同上下文中。static KeyboardFocusManager
返回调用线程上下文中的当前KeyboardFocusManager实例。getDefaultFocusTraversalKeys
(int id) 返回给定遍历操作的默认焦点遍历键集。返回默认的FocusTraversalPolicy。返回焦点窗口,如果焦点窗口与调用线程位于相同上下文中。返回焦点所有者,如果焦点所有者与调用线程位于相同上下文中。protected Window
返回活动窗口,即使调用线程位于不同上下文中。protected Container
返回当前焦点循环根容器,即使调用线程位于不同上下文中。protected Window
返回焦点窗口,即使调用线程位于不同上下文中。protected Component
返回焦点所有者,即使调用线程位于不同上下文中。protected Component
返回永久焦点所有者,即使调用线程位于不同上下文中。protected List
<KeyEventDispatcher> 将此KeyboardFocusManager的KeyEventDispatcher链作为List返回。protected List
<KeyEventPostProcessor> 将此KeyboardFocusManager的KeyEventPostProcessor链作为List返回。返回永久焦点所有者,如果永久焦点所有者与调用线程位于相同上下文中。返回在此键盘焦点管理器上注册的所有属性更改监听器的数组。getPropertyChangeListeners
(String propertyName) 返回与指定属性关联的所有PropertyChangeListener
数组。返回在此键盘焦点管理器上注册的所有可否决更改监听器的数组。getVetoableChangeListeners
(String propertyName) 返回与指定属性关联的所有VetoableChangeListener
数组。abstract boolean
此方法将由dispatchKeyEvent
调用。abstract void
processKeyEvent
(Component focusedComponent, KeyEvent e) 如果KeyEvent表示指定focusedComponent的焦点遍历键,则此方法仅启动焦点遍历操作。final void
redispatchEvent
(Component target, AWTEvent e) 以这样的方式重新分派AWTEvent,使得AWT事件分发器不会递归请求KeyboardFocusManager或任何已安装的KeyEventDispatchers再次分派事件。void
removeKeyEventDispatcher
(KeyEventDispatcher dispatcher) 从此KeyboardFocusManager的分发器链中删除先前添加的KeyEventDispatcher。void
removeKeyEventPostProcessor
(KeyEventPostProcessor processor) 从此KeyboardFocusManager的后处理器链中删除先前添加的KeyEventPostProcessor。void
从监听器列表中删除PropertyChangeListener。void
removePropertyChangeListener
(String propertyName, PropertyChangeListener listener) 从特定属性的监听器列表中删除PropertyChangeListener。void
从监听器列表中删除VetoableChangeListener。void
removeVetoableChangeListener
(String propertyName, VetoableChangeListener listener) 从特定属性的监听器列表中删除VetoableChangeListener。static void
setCurrentKeyboardFocusManager
(KeyboardFocusManager newManager) 为调用线程的上下文设置当前KeyboardFocusManager实例。void
setDefaultFocusTraversalKeys
(int id, Set<? extends AWTKeyStroke> keystrokes) 为给定遍历操作设置默认焦点遍历键。void
setDefaultFocusTraversalPolicy
(FocusTraversalPolicy defaultPolicy) 设置默认的FocusTraversalPolicy。protected void
setGlobalActiveWindow
(Window activeWindow) 设置活动窗口。void
setGlobalCurrentFocusCycleRoot
(Container newFocusCycleRoot) 设置当前焦点循环根容器。protected void
setGlobalFocusedWindow
(Window focusedWindow) 设置焦点窗口。protected void
setGlobalFocusOwner
(Component focusOwner) 设置焦点所有者。protected void
setGlobalPermanentFocusOwner
(Component permanentFocusOwner) 设置永久焦点所有者。final void
将焦点从当前焦点所有者向上移动一个焦点遍历周期。abstract void
upFocusCycle
(Component aComponent) 将焦点向上移动一个焦点遍历周期。
-
Field Details
-
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_KEYS向上循环焦点遍历键的标识符。- 参见:
-
DOWN_CYCLE_TRAVERSAL_KEYS
public static final int DOWN_CYCLE_TRAVERSAL_KEYS向下循环焦点遍历键的标识符。- 参见:
-
-
Constructor Details
-
KeyboardFocusManager
public KeyboardFocusManager()初始化KeyboardFocusManager。
-
-
Method Details
-
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
返回焦点所有者,如果焦点所有者在调用线程的上下文中。焦点所有者被定义为应用程序中将通常接收用户生成的所有KeyEvents的组件。如果为焦点所有者启用了焦点遍历键,则映射到焦点所有者的焦点遍历键的KeyEvents将不会传递。此外,KeyEventDispatchers可能会在到达焦点所有者之前重新定向或消耗KeyEvents。- 返回:
- 焦点所有者,如果焦点所有者不是调用线程的上下文的成员,则为null
- 参见:
-
getGlobalFocusOwner
返回焦点所有者,即使调用线程与焦点所有者不在同一上下文中。焦点所有者被定义为应用程序中将通常接收用户生成的所有KeyEvents的组件。如果为焦点所有者启用了焦点遍历键,则映射到焦点所有者的焦点遍历键的KeyEvents将不会传递。此外,KeyEventDispatchers可能会在到达焦点所有者之前重新定向或消耗KeyEvents。如果此KeyboardFocusManager不是调用线程上下文的当前KeyboardFocusManager,则此方法将抛出SecurityException。
- 返回:
- 焦点所有者
- 抛出:
-
SecurityException
- 如果此KeyboardFocusManager不是调用线程上下文的当前KeyboardFocusManager,并且调用线程没有"replaceKeyboardFocusManager"权限 - 参见:
-
setGlobalFocusOwner
设置焦点所有者。如果组件不可聚焦,则操作将被取消。焦点所有者被定义为应用程序中将通常接收用户生成的所有KeyEvents的组件。如果为焦点所有者启用了焦点遍历键,则映射到焦点所有者的焦点遍历键的KeyEvents将不会传递。此外,KeyEventDispatchers可能会在到达焦点所有者之前重新定向或消耗KeyEvents。此方法实际上不会将焦点设置到指定的组件。它仅存储要由
getFocusOwner()
随后返回的值。使用Component.requestFocus()
或Component.requestFocusInWindow()
来更改焦点所有者,受平台限制。- 参数:
-
focusOwner
- 焦点所有者 - 抛出:
-
SecurityException
- 如果此KeyboardFocusManager不是调用线程上下文的当前KeyboardFocusManager,并且调用线程没有"replaceKeyboardFocusManager"权限 - 参见:
-
clearFocusOwner
public void clearFocusOwner()如果焦点所有者存在并且位于调用线程的上下文中,则在Java和本机级别清除焦点所有者,否则方法将静默返回。焦点所有者组件将接收永久的FOCUS_LOST事件。完成此操作后,本机窗口系统将丢弃所有用户生成的KeyEvents,直到用户选择新的组件来接收焦点,或通过调用
requestFocus()
显式地给组件焦点。此操作不会更改焦点或活动窗口。- 自:
- 1.8
- 参见:
-
clearGlobalFocusOwner
在Java和本机级别清除全局焦点所有者。如果存在焦点所有者,则该组件将接收永久的FOCUS_LOST事件。完成此操作后,本机窗口系统将丢弃所有用户生成的KeyEvents,直到用户选择新的组件来接收焦点,或通过调用requestFocus()
显式地给组件焦点。此操作不会更改焦点或活动窗口。如果安装了SecurityManager,则调用线程必须被授予"replaceKeyboardFocusManager" AWTPermission。如果未授予此权限,此方法将抛出SecurityException,并且当前焦点所有者将不会被清除。
此方法仅供设置为调用线程上下文的当前KeyboardFocusManager的KeyboardFocusManager使用。不适用于一般客户端使用。
- 抛出:
-
SecurityException
- 如果调用线程没有"replaceKeyboardFocusManager"权限 - 参见:
-
getPermanentFocusOwner
返回永久焦点所有者,如果永久焦点所有者在调用线程的上下文中。永久焦点所有者被定义为应用程序中接收永久FOCUS_GAINED事件的最后一个组件。焦点所有者和永久焦点所有者是等效的,除非当前存在临时焦点更改。在这种情况下,当临时焦点更改结束时,永久焦点所有者将再次成为焦点所有者。- 返回:
- 永久焦点所有者,如果永久焦点所有者不是调用线程的上下文的成员,则为null
- 参见:
-
getGlobalPermanentFocusOwner
返回永久焦点所有者,即使调用线程与永久焦点所有者处于不同上下文中。永久焦点所有者被定义为应用程序中接收永久FOCUS_GAINED事件的最后一个组件。焦点所有者和永久焦点所有者是等效的,除非当前正在生效临时焦点更改。在这种情况下,当临时焦点更改结束时,永久焦点所有者将再次成为焦点所有者。- 返回:
- 永久焦点所有者
- 抛出:
-
SecurityException
- 如果此KeyboardFocusManager不是调用线程上下文的当前KeyboardFocusManager,并且调用线程没有"replaceKeyboardFocusManager"权限 - 参见:
-
setGlobalPermanentFocusOwner
设置永久焦点所有者。如果组件不可聚焦,则操作将被取消。永久焦点所有者被定义为应用程序中接收永久FOCUS_GAINED事件的最后一个组件。焦点所有者和永久焦点所有者是等效的,除非当前正在生效临时焦点更改。在这种情况下,当临时焦点更改结束时,永久焦点所有者将再次成为焦点所有者。此方法实际上不会将焦点设置到指定的组件。它只是存储要由
getPermanentFocusOwner()
随后返回的值。使用Component.requestFocus()
或Component.requestFocusInWindow()
来更改焦点所有者,受平台限制。- 参数:
-
permanentFocusOwner
- 永久焦点所有者 - 抛出:
-
SecurityException
- 如果此KeyboardFocusManager不是调用线程上下文的当前KeyboardFocusManager,并且调用线程没有"replaceKeyboardFocusManager"权限 - 参见:
-
getFocusedWindow
返回焦点的窗口,如果焦点的窗口与调用线程处于相同上下文中。焦点的窗口是焦点所有者所在的窗口。- 返回:
- 焦点的窗口,如果焦点的窗口不是调用线程上下文的成员,则返回null
- 参见:
-
getGlobalFocusedWindow
返回焦点的窗口,即使调用线程与焦点的窗口处于不同上下文中。焦点的窗口是焦点所有者所在的窗口。- 返回:
- 焦点的窗口
- 抛出:
-
SecurityException
- 如果此KeyboardFocusManager不是调用线程上下文的当前KeyboardFocusManager,并且调用线程没有"replaceKeyboardFocusManager"权限 - 参见:
-
setGlobalFocusedWindow
设置焦点的窗口。焦点的窗口是焦点所有者所在的窗口。如果要聚焦的窗口不是可聚焦窗口,则操作将被取消。此方法实际上不会根据本机窗口系统更改焦点的窗口。它只是存储要由
getFocusedWindow()
随后返回的值。使用Component.requestFocus()
或Component.requestFocusInWindow()
来更改焦点的窗口,受平台限制。- 参数:
-
focusedWindow
- 焦点的窗口 - 抛出:
-
SecurityException
- 如果此KeyboardFocusManager不是调用线程上下文的当前KeyboardFocusManager,并且调用线程没有"replaceKeyboardFocusManager"权限 - 参见:
-
getActiveWindow
返回活动窗口,如果活动窗口与调用线程处于相同上下文中。只有Frame或Dialog可以是活动窗口。本机窗口系统可能使用特殊装饰来表示活动窗口或其子窗口,例如突出显示的标题栏。活动窗口始终是焦点窗口,或者是焦点窗口的第一个Frame或Dialog的所有者。- 返回:
- 活动窗口,如果活动窗口不是调用线程上下文的成员,则返回null
- 参见:
-
getGlobalActiveWindow
返回活动窗口,即使调用线程与活动窗口处于不同上下文中。只有Frame或Dialog可以是活动窗口。本机窗口系统可能使用特殊装饰来表示活动窗口或其子窗口,例如突出显示的标题栏。活动窗口始终是焦点窗口,或者是焦点窗口的第一个Frame或Dialog的所有者。- 返回:
- 活动窗口
- 抛出:
-
SecurityException
- 如果此KeyboardFocusManager不是调用线程上下文的当前KeyboardFocusManager,并且调用线程没有"replaceKeyboardFocusManager"权限 - 参见:
-
setGlobalActiveWindow
设置活动窗口。只有Frame或Dialog可以是活动窗口。本机窗口系统可能使用特殊装饰来表示活动窗口或其子窗口,例如突出显示的标题栏。活动窗口始终是焦点窗口,或者是焦点窗口的第一个Frame或Dialog的所有者。此方法实际上不会根据本机窗口系统更改活动窗口。它只是存储要由
getActiveWindow()
随后返回的值。使用Component.requestFocus()
或Component.requestFocusInWindow()
来更改活动窗口,受平台限制。- 参数:
-
activeWindow
- 活动窗口 - 抛出:
-
SecurityException
- 如果此KeyboardFocusManager不是调用线程上下文的当前KeyboardFocusManager,并且调用线程没有"replaceKeyboardFocusManager"权限 - 参见:
-
getDefaultFocusTraversalPolicy
返回默认的焦点遍历策略。顶层组件在创建时使用此值来通过显式调用Container.setFocusTraversalPolicy初始化自己的焦点遍历策略。- 返回:
- 默认的焦点遍历策略。永远不会返回null。
- 参见:
-
setDefaultFocusTraversalPolicy
设置默认的焦点遍历策略。顶层组件在创建时使用此值来通过显式调用Container.setFocusTraversalPolicy初始化自己的焦点遍历策略。注意:此调用不会影响已创建的组件,因为它们已经初始化了自己的策略。只有新组件将使用此策略作为它们的默认策略。- 参数:
-
defaultPolicy
- 新的默认焦点遍历策略 - 抛出:
-
IllegalArgumentException
- 如果defaultPolicy为null - 参见:
-
setDefaultFocusTraversalKeys
设置给定遍历操作的默认焦点遍历键。这个遍历键Set
将在所有没有明确定义自己的Set
的Window
上生效。这个Set
也将被任何没有明确定义自己的Set
的Windows
的子Component
递归继承。默认焦点遍历键的默认值取决于实现。Sun建议特定本机平台的所有实现使用相同的默认值。Windows和Unix的建议如下。这些建议在Sun AWT实现中使用。
推荐的焦点遍历键的默认值 标识符 含义 默认值 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
。使用
AWTKeyStroke
API,客户端代码可以指定焦点遍历操作将在哪两个特定的KeyEvent
中发生,KEY_PRESSED
或KEY_RELEASED
。然而,无论指定哪个KeyEvent
,与焦点遍历键相关的所有KeyEvent
,包括关联的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
的Set
- 抛出:
-
IllegalArgumentException
- 如果id不是KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS
、KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS
、KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS
或KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS
之一,或者如果keystrokes为null
,或者如果keystrokes包含null
,或者如果任何按键表示KEY_TYPED
事件,或者如果任何按键已经映射到另一个默认焦点遍历操作 - 参见:
-
getDefaultFocusTraversalKeys
返回给定遍历操作的默认焦点遍历键的Set
。这个遍历键Set
将在所有没有明确定义自己的Set
的Windows
上生效。这个Set
也将被任何没有明确定义自己的Set
的Windows
的子Component
递归继承。(有关每个操作的完整描述,请参阅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
返回当前焦点循环根,如果当前焦点循环根与调用线程的上下文相同。如果焦点所有者本身是焦点循环根,则在正常焦点遍历期间区分下一个和上一个要聚焦的组件可能会产生歧义。在这种情况下,当前焦点循环根用于区分可能性。此方法仅供
KeyboardFocusManagers
和焦点实现使用。不适用于一般客户端使用。- 返回:
-
当前焦点循环根,如果当前焦点循环根不是调用线程的上下文的成员,则为
null
- 参见:
-
getGlobalCurrentFocusCycleRoot
返回当前焦点循环根,即使调用线程与当前焦点循环根不在同一上下文中。如果焦点所有者本身是焦点循环根,则在正常焦点遍历期间区分下一个和上一个要聚焦的组件可能会产生歧义。在这种情况下,当前焦点循环根用于区分可能性。- 返回:
-
当前焦点循环根,如果当前焦点循环根不是调用线程的上下文的成员,则为
null
- 抛出:
-
SecurityException
- 如果此KeyboardFocusManager
不是调用线程上下文的当前KeyboardFocusManager
,并且调用线程没有"replaceKeyboardFocusManager"权限 - 参见:
-
setGlobalCurrentFocusCycleRoot
设置当前焦点循环根。如果焦点所有者本身是焦点循环根,则在正常焦点遍历期间区分下一个和上一个要聚焦的组件可能会产生歧义。在这种情况下,当前焦点循环根用于区分可能性。如果安装了
SecurityManager
,则调用线程必须被授予"replaceKeyboardFocusManager"AWTPermission
。如果未授予此权限,此方法将抛出SecurityException
,并且当前焦点循环根将不会更改。此方法仅供
KeyboardFocusManagers
和焦点实现使用。不适用于一般客户端使用。- 参数:
-
newFocusCycleRoot
- 新的焦点循环根 - 抛出:
-
SecurityException
- 如果调用线程没有"replaceKeyboardFocusManager"权限 - 参见:
-
addPropertyChangeListener
向监听器列表添加一个PropertyChangeListener
。该监听器为此类的所有绑定属性注册,包括以下内容:- 键盘焦点管理器当前是否正在管理此应用程序或小程序的浏览器上下文的焦点("managingFocus")
- 焦点所有者("focusOwner")
- 永久焦点所有者("permanentFocusOwner")
- 焦点的
Window
("focusedWindow") - 活动
Window
("activeWindow") - 默认焦点遍历策略("defaultFocusTraversalPolicy")
- 默认
FORWARD_TRAVERSAL_KEYS
的Set
("forwardDefaultFocusTraversalKeys") - 默认
BACKWARD_TRAVERSAL_KEYS
的Set
("backwardDefaultFocusTraversalKeys") - 默认
UP_CYCLE_TRAVERSAL_KEYS
的Set
("upCycleDefaultFocusTraversalKeys") - 默认
DOWN_CYCLE_TRAVERSAL_KEYS
的Set
("downCycleDefaultFocusTraversalKeys") - 当前焦点循环根("currentFocusCycleRoot")
null
,则不会抛出异常,也不会执行任何操作。- 参数:
-
listener
- 要添加的PropertyChangeListener
- 参见:
-
removePropertyChangeListener
从监听器列表中移除一个PropertyChangeListener。应该使用此方法来移除为该类的所有绑定属性注册的PropertyChangeListeners。如果listener为null,则不会抛出异常,也不执行任何操作。
- 参数:
-
listener
- 要移除的PropertyChangeListener - 另请参阅:
-
getPropertyChangeListeners
返回在此键盘焦点管理器上注册的所有属性更改监听器的数组。- 返回:
-
所有此键盘焦点管理器的
PropertyChangeListener
,如果当前没有注册任何属性更改监听器,则返回空数组 - 自版本:
- 1.4
- 另请参阅:
-
addPropertyChangeListener
向监听器列表中为特定属性添加一个PropertyChangeListener。指定的属性可以是用户定义的,也可以是以下之一:- 键盘焦点管理器当前是否正在管理此应用程序或小程序的浏览器上下文的焦点("managingFocus")
- 焦点所有者("focusOwner")
- 永久焦点所有者("permanentFocusOwner")
- 焦点窗口("focusedWindow")
- 活动窗口("activeWindow")
- 默认焦点遍历策略("defaultFocusTraversalPolicy")
- 默认前向遍历键集合("forwardDefaultFocusTraversalKeys")
- 默认后向遍历键集合("backwardDefaultFocusTraversalKeys")
- 默认上循环遍历键集合("upCycleDefaultFocusTraversalKeys")
- 默认下循环遍历键集合("downCycleDefaultFocusTraversalKeys")
- 当前焦点循环根("currentFocusCycleRoot")
- 参数:
-
propertyName
- 上述属性名称之一 -
listener
- 要添加的PropertyChangeListener - 另请参阅:
-
removePropertyChangeListener
从特定属性的监听器列表中移除一个PropertyChangeListener。应该使用此方法来移除为特定绑定属性注册的PropertyChangeListeners。如果listener为null,则不会抛出异常,也不执行任何操作。
- 参数:
-
propertyName
- 有效的属性名称 -
listener
- 要移除的PropertyChangeListener - 另请参阅:
-
getPropertyChangeListeners
返回与指定属性关联的所有PropertyChangeListener
的数组。- 参数:
-
propertyName
- 属性名称 - 返回:
-
与指定属性关联的所有
PropertyChangeListener
,如果尚未添加此类监听器,则返回空数组。 - 自版本:
- 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
返回在此键盘焦点管理器上注册的所有可否决更改监听器的数组。- 返回:
-
所有此键盘焦点管理器的
VetoableChangeListener
,如果当前没有注册任何可否决更改监听器,则返回空数组 - 自版本:
- 1.4
- 另请参阅:
-
addVetoableChangeListener
向监听器列表中为特定属性添加一个VetoableChangeListener。指定的属性可以是用户定义的,也可以是以下之一:- 焦点所有者("focusOwner")
- 永久焦点所有者("permanentFocusOwner")
- 焦点窗口("focusedWindow")
- 活动窗口("activeWindow")
- 参数:
-
propertyName
- 上述属性名称之一 -
listener
- 要添加的VetoableChangeListener - 另请参阅:
-
removeVetoableChangeListener
从特定属性的监听器列表中移除一个VetoableChangeListener。应该使用此方法来移除为特定绑定属性注册的VetoableChangeListeners。如果listener为null,则不会抛出异常,也不执行任何操作。
- 参数:
-
propertyName
- 有效的属性名称 -
listener
- 要移除的VetoableChangeListener - 另请参阅:
-
getVetoableChangeListeners
返回与指定属性关联的所有VetoableChangeListener
的数组。- 参数:
-
propertyName
- 属性名称 - 返回:
-
与指定属性关联的所有
VetoableChangeListener
,如果没有添加此类监听器,则返回一个空数组。 - 自版本:
- 1.4
- 参见:
-
fireVetoableChange
protected void fireVetoableChange(String propertyName, Object oldValue, Object newValue) throws PropertyVetoException 在响应可否否决属性更改时触发PropertyChangeEvent。事件将传递给所有已注册的VetoableChangeListeners。如果VetoableChangeListener抛出PropertyVetoException,则会触发一个新事件,将所有VetoableChangeListeners恢复为旧值,然后重新抛出异常。如果oldValue和newValue相同,则不会传递事件。- 参数:
-
propertyName
- 已更改的属性名称 -
oldValue
- 属性的先前值 -
newValue
- 属性的新值 - 抛出:
-
PropertyVetoException
- 如果VetoableChangeListener
抛出PropertyVetoException
-
addKeyEventDispatcher
将KeyEventDispatcher添加到此KeyboardFocusManager的调度器链中。此KeyboardFocusManager将请求每个KeyEventDispatcher在最终调度KeyEvent本身之前调度用户生成的KeyEvents。KeyEventDispatchers将按照它们添加的顺序通知。一旦一个KeyEventDispatcher从其dispatchKeyEvent
方法返回true
,通知将停止。可以添加的KeyEventDispatchers总数没有限制,也没有特定的KeyEventDispatcher实例可以添加的次数限制。如果指定了空调度器,则不会执行任何操作,也不会抛出异常。
在多线程应用程序中,
KeyEventDispatcher
的行为与其他AWT监听器相同。有关更多详细信息,请参阅AWT线程问题。- 参数:
-
dispatcher
- 要添加到调度器链中的KeyEventDispatcher - 参见:
-
removeKeyEventDispatcher
从此KeyboardFocusManager的调度器链中删除先前添加的KeyEventDispatcher。除非通过调用addKeyEventDispatcher
显式重新注册,否则无法完全删除此KeyboardFocusManager本身。如果指定了空调度器,如果指定的调度器不在调度器链中,或者如果未显式重新注册此KeyboardFocusManager,则不会执行任何操作,也不会抛出异常。
在多线程应用程序中,
KeyEventDispatcher
的行为与其他AWT监听器相同。有关更多详细信息,请参阅AWT线程问题。- 参数:
-
dispatcher
- 要从调度器链中删除的KeyEventDispatcher - 参见:
-
getKeyEventDispatchers
返回此KeyboardFocusManager的KeyEventDispatcher链作为List。该List不会包括此KeyboardFocusManager,除非通过调用addKeyEventDispatcher
显式重新注册。如果没有注册其他KeyEventDispatchers,实现可以自由返回null或长度为0的List。客户端代码不应假定一种行为优于另一种,也不应假定一旦建立,行为就不会改变。- 返回:
- 可能为null或空的KeyEventDispatchers列表
- 参见:
-
addKeyEventPostProcessor
将KeyEventPostProcessor添加到此KeyboardFocusManager的后处理器链中。在KeyEvent被分派到其目标并由其处理后,KeyboardFocusManager将请求每个KeyEventPostProcessor作为KeyEvent最终解析的一部分执行任何必要的后处理。KeyEventPostProcessors将按照它们添加的顺序通知;当前KeyboardFocusManager将最后通知。一旦一个KeyEventPostProcessor从其postProcessKeyEvent
方法返回true
,通知将停止。可以添加的KeyEventPostProcessors总数没有限制,也没有特定的KeyEventPostProcessor实例可以添加的次数限制。如果指定了空后处理器,则不会执行任何操作,也不会抛出异常。
在多线程应用程序中,
KeyEventPostProcessor
的行为与其他AWT监听器相同。有关更多详细信息,请参阅AWT线程问题。- 参数:
-
processor
- 要添加到后处理器链中的KeyEventPostProcessor - 参见:
-
removeKeyEventPostProcessor
从此KeyboardFocusManager的后处理器链中删除先前添加的KeyEventPostProcessor。此KeyboardFocusManager本身无法完全删除。只能删除通过addKeyEventPostProcessor
添加的其他引用。如果指定了空后处理器,如果指定的后处理器不在后处理器链中,或者如果未显式添加此KeyboardFocusManager,则不会执行任何操作,也不会抛出异常。
在多线程应用程序中,
KeyEventPostProcessor
的行为与其他AWT监听器相同。有关更多详细信息,请参阅AWT线程问题。- 参数:
-
processor
- 要从后处理器链中删除的KeyEventPostProcessor - 参见:
-
getKeyEventPostProcessors
返回此KeyboardFocusManager的KeyEventPostProcessor链作为List。该List不会包括此KeyboardFocusManager,除非通过调用addKeyEventPostProcessor
显式添加。如果未注册任何KeyEventPostProcessors,实现可以自由返回null或长度为0的List。客户端代码不应假定一种行为优于另一种,也不应假定一旦建立,行为就不会改变。- 返回:
- 可能为null或空的KeyEventPostProcessors列表
- 参见:
-
dispatchEvent
AWT事件分派程序调用此方法,请求当前KeyboardFocusManager代表其调度指定事件。预期所有KeyboardFocusManagers将基于KeyboardFocusManager对焦点所有者、焦点相关的所有WindowEvents以及所有KeyEvents的概念,有时覆盖指定AWTEvent的源,分派所有FocusEvents、与焦点相关的所有WindowEvents以及所有KeyEvents。必须使用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,或者没有其他KeyEventDispatchers被注册,那么将调用此方法。如果此方法的实现返回false
,dispatchEvent
可能会尝试自行分派KeyEvent,或者可能只是返回false
。如果返回true
,dispatchEvent
也应该返回true
。- 指定者:
-
dispatchKeyEvent
在接口KeyEventDispatcher
- 参数:
-
e
- 当前KeyboardFocusManager请求此KeyEventDispatcher分派的KeyEvent - 返回:
-
如果分派了KeyEvent,则返回
true
;否则返回false
- 参见:
-
postProcessKeyEvent
此方法将由dispatchKeyEvent
调用。默认情况下,此方法将处理任何未消耗的KeyEvent,将其映射到AWTMenuShortcut
,并消耗事件并激活快捷方式。- 指定者:
-
postProcessKeyEvent
在接口KeyEventPostProcessor
- 参数:
-
e
- 要后处理的KeyEvent - 返回:
-
返回
true
表示不会通知其他KeyEventPostProcessor处理该KeyEvent。 - 参见:
-
processKeyEvent
如果KeyEvent表示指定focusedComponent的焦点遍历键,则此方法将启动焦点遍历操作。预期focusedComponent是当前焦点所有者,尽管这不一定是情况。如果不是,则焦点遍历将继续进行,就好像focusedComponent是当前焦点所有者一样。- 参数:
-
focusedComponent
- 如果指定事件表示Component的焦点遍历键,则将成为焦点遍历操作的基础 -
e
- 可能表示焦点遍历键的事件
-
enqueueKeyEvents
AWT调用此方法,通知KeyboardFocusManager应该延迟分派KeyEvents,直到指定的Component成为焦点所有者。如果客户端代码请求焦点更改,并且AWT确定本请求可能由本机窗口系统授予,则AWT将调用此方法。KeyboardFocusManager有责任延迟分派具有晚于指定时间戳的KeyEvents,直到指定Component接收到FOCUS_GAINED事件,或者AWT通过调用dequeueKeyEvents
或discardKeyEvents
取消延迟请求。- 参数:
-
after
- 当前事件的时间戳,或者当前事件没有时间戳,则为当前系统时间,或者AWT无法确定当前正在处理的事件 -
untilFocused
- 在任何挂起的KeyEvents之前应该接收FOCUS_GAINED事件的Component - 参见:
-
dequeueKeyEvents
AWT调用此方法,通知KeyboardFocusManager应该取消延迟分派的KeyEvents。由于调用enqueueKeyEvents
而排队的所有KeyEvents,具有相同时间戳和Component的请求应该释放以正常分派给当前焦点所有者。如果给定的时间戳小于零,则应取消具有最旧时间戳的给定Component的挂起请求(如果有)。- 参数:
-
after
- 在调用enqueueKeyEvents
时指定的时间戳,或任何值< 0 -
untilFocused
- 在调用enqueueKeyEvents
时指定的Component - 参见:
-
discardKeyEvents
AWT调用此方法,通知KeyboardFocusManager应该取消延迟分派的KeyEvents。由于一个或多个调用enqueueKeyEvents
而排队的所有KeyEvents,具有相同Component的请求应该被丢弃。- 参数:
-
comp
- 在一个或多个调用enqueueKeyEvents
中指定的Component - 参见:
-
focusNextComponent
将焦点设置在aComponent之后的Component上,通常基于FocusTraversalPolicy。- 参数:
-
aComponent
- 作为焦点遍历操作基础的Component - 参见:
-
focusPreviousComponent
将焦点设置在aComponent之前的Component上,通常基于FocusTraversalPolicy。- 参数:
-
aComponent
- 作为焦点遍历操作基础的Component - 参见:
-
upFocusCycle
将焦点向上移动一个焦点遍历周期。通常,焦点所有者设置为aComponent的焦点循环根,并且当前焦点循环根设置为新焦点所有者的焦点循环根。但是,如果aComponent的焦点循环根是一个Window,则通常焦点所有者设置为窗口的默认焦点Component,并且当前焦点循环根保持不变。- 参数:
-
aComponent
- 作为焦点遍历操作基础的Component
-
downFocusCycle
将焦点向下移动一个焦点遍历周期。通常,如果aContainer是焦点循环根,则焦点所有者设置为aContainer的默认焦点Component,并且当前焦点循环根设置为aContainer。如果aContainer不是焦点循环根,则不会发生焦点遍历操作。- 参数:
-
aContainer
- 作为焦点遍历操作基础的Container
-
focusNextComponent
public final void focusNextComponent()将焦点设置在当前焦点所有者之后的Component上。 -
focusPreviousComponent
public final void focusPreviousComponent()将焦点设置在当前焦点所有者之前的Component上。 -
upFocusCycle
public final void upFocusCycle()从当前焦点所有者向上移动一个焦点遍历周期。通常,新焦点所有者设置为当前焦点所有者的焦点循环根,并且当前焦点循环根设置为新焦点所有者的焦点循环根。但是,如果当前焦点所有者的焦点循环根是一个Window,则通常焦点所有者设置为焦点循环根的默认焦点Component,并且当前焦点循环根保持不变。 -
downFocusCycle
public final void downFocusCycle()从当前焦点所有者向下移动一个焦点遍历周期,仅当当前焦点所有者是焦点循环根的Container时。通常,焦点所有者设置为当前焦点所有者的默认焦点Component,并且当前焦点循环根设置为当前焦点所有者。如果当前焦点所有者不是焦点循环根的Container,则不会发生焦点遍历操作。
-