InputMethod的子类可以由输入法框架加载;然后可以通过API(InputContext.selectInputMethod
)或用户界面(输入法选择菜单)选择它们。
- 自 JDK 版本:
- 1.3
-
Method Summary
Modifier and TypeMethodDescriptionvoid
activate()
激活输入法以进行即时输入处理。void
deactivate
(boolean isTemporary) 停用输入法。void
dispatchEvent
(AWTEvent event) 将事件分派给输入法。void
dispose()
释放此输入法使用的资源。void
结束当前可能正在进行的任何输入组合。从此输入法返回控制对象,或 null。返回当前输入区域设置。void
关闭或隐藏由此输入法实例或其类打开的所有窗口。boolean
确定此输入法是否已启用。void
notifyClientWindowChange
(Rectangle bounds) 通知此输入法客户端窗口位置或状态发生变化。void
启动重新转换操作。void
通知输入法客户端组件已从其包含层次结构中移除,或者已为组件禁用输入法支持。void
setCharacterSubsets
(Character.Subset[] subsets) 设置此输入法允许输入的 Unicode 字符集的子集。void
setCompositionEnabled
(boolean enable) 根据参数enable
的值启用或禁用此输入法进行组合。void
setInputMethodContext
(InputMethodContext context) 设置输入法上下文,用于将输入法事件分派给客户端组件并从客户端组件请求信息。boolean
尝试设置输入区域设置。
-
Method Details
-
setInputMethodContext
设置输入法上下文,用于将输入法事件分派给客户端组件并从客户端组件请求信息。此方法在实例化此输入法后立即调用一次。
- 参数:
-
context
- 此输入法的输入法上下文 - 抛出:
-
NullPointerException
- 如果context
为 null
-
setLocale
尝试设置输入区域设置。如果输入法支持所需的区域设置,则更改其行为以支持该区域设置的输入并返回 true。否则,返回 false 并且不更改其行为。此方法被调用
- 通过
InputContext.selectInputMethod
, - 通过用户界面切换到此输入法时,如果用户指定了区域设置,或者如果先前选择的输入法的
getLocale
方法返回非 null 值。
- 参数:
-
locale
- 要输入的区域设置 - 返回:
- 指定的区域设置是否受支持
- 抛出:
-
NullPointerException
- 如果locale
为 null
- 通过
-
getLocale
Locale getLocale()返回当前输入区域设置。在特殊情况下可能返回 null。此方法被调用
- 通过
InputContext.getLocale
,以及 - 通过用户界面从此输入法切换到另一个输入法时。
- 返回:
- 当前输入区域设置,或 null
- 通过
-
setCharacterSubsets
设置此输入法允许输入的 Unicode 字符集的子集。可以传入 null 表示允许所有字符。此方法被调用
- 在实例化此输入法后立即调用,
- 从其他输入法切换到此输入法时调用,以及
- 通过
InputContext.setCharacterSubsets
调用。
- 参数:
-
subsets
- 可以输入字符的 Unicode 字符集的子集
-
setCompositionEnabled
void setCompositionEnabled(boolean enable) 根据参数enable
的值启用或禁用此输入法进行组合。对于由主机操作系统提供的输入法,通常无法确定是否支持此操作。例如,输入法可能仅为某些区域设置启用组合,并且对于其他区域设置不执行任何操作。对于这种输入法,该方法可能不会抛出
UnsupportedOperationException
,但也不会影响组合是否已启用。此方法被调用
- 通过
InputContext.setCompositionEnabled
, - 通过用户界面或
InputContext.selectInputMethod
从其他输入法切换到此输入法时,如果先前选择的输入法的isCompositionEnabled
方法在不抛出异常的情况下返回。
- 参数:
-
enable
- 是否启用输入法进行组合 - 抛出:
-
UnsupportedOperationException
- 如果此输入法不支持启用/禁用操作 - 参见:
- 通过
-
isCompositionEnabled
boolean isCompositionEnabled()确定此输入法是否已启用。已启用组合的输入法会解释传入事件用于组合和控制目的,而已禁用的输入法不会解释用于组合的事件。此方法被调用
- 通过
InputContext.isCompositionEnabled
,以及 - 通过用户界面或
InputContext.selectInputMethod
从此输入法切换到其他输入法时。
- 返回:
-
如果此输入法已启用进行组合,则返回
true
;否则返回false
。 - 抛出:
-
UnsupportedOperationException
- 如果此输入法不支持检查是否已启用进行组合 - 参见:
- 通过
-
reconvert
void reconvert()启动重新转换操作。输入法使用InputMethodRequests.getSelectedText
方法从当前客户端组件获取要重新转换的文本。它可以使用其他InputMethodRequests
方法请求重新转换操作所需的其他信息。操作生成的组合和已确认文本作为一系列InputMethodEvent
发送到客户端组件。如果给定的文本无法重新转换,则应将相同的文本作为已确认文本发送到客户端组件。此方法被
InputContext.reconvert
调用。- 抛出:
-
UnsupportedOperationException
- 如果输入法不支持重新转换操作。
-
dispatchEvent
将事件分派给输入法。如果已为焦点组件启用输入法支持,则特定类型的传入事件将在分派到组件的方法或事件侦听器之前分派到此组件的当前输入法。输入法决定是否需要处理事件。如果需要处理,则还会调用事件的consume
方法;这会导致事件不会分派到组件的事件处理方法或事件侦听器。如果事件是 InputEvent 或其子类的实例,则会分派事件。这包括 AWT 类 KeyEvent 和 MouseEvent 的实例。
此方法被
InputContext.dispatchEvent
调用。- 参数:
-
event
- 要分派给输入法的事件 - 抛出:
-
NullPointerException
- 如果event
为 null
-
notifyClientWindowChange
通知输入法当前客户端窗口位置或状态发生变化。在输入法是其输入上下文的当前输入法且已启用其通知时调用此方法(参见InputMethodContext.enableClientWindowNotification
)。如果调用输入上下文的removeNotify
方法,则对此方法的调用会暂时挂起,并在为新的客户端组件激活输入法时恢复。在以下情况下调用此方法:- 当前客户端组件所在的窗口位置、大小、可见性、最小化状态发生变化,或者窗口关闭时。
- 如果当前客户端组件存在,则从
enableClientWindowNotification(inputMethod, true)
调用。 - 如果在调用
enableClientWindowNotification(inputMethod, true)
期间没有当前客户端组件可用,则在首次激活输入法时调用。 - 在调用输入上下文的removeNotify方法后,为新的客户端组件激活输入法时调用。
- 参数:
-
bounds
- 客户端窗口在屏幕上的bounds
;如果客户端窗口最小化或不可见,则为null
-
activate
void activate()激活输入法以进行即时输入处理。如果输入法提供自己的窗口,则此时应确保所有必要的窗口都已打开并可见。
调用此方法的情况包括:
- 当客户端组件接收到FOCUS_GAINED事件时,由
InputContext.dispatchEvent
调用。 - 通过用户界面或
InputContext.selectInputMethod
从不同输入法切换到此输入法时。
- 当客户端组件接收到FOCUS_GAINED事件时,由
-
deactivate
void deactivate(boolean isTemporary) 停用输入法。isTemporary参数的含义与FocusEvent.isTemporary
中的含义相同。如果输入法提供自己的窗口,则此时应仅关闭与当前组合相关的窗口(例如查找选择窗口)。可能会立即为不同的客户端组件再次激活输入法,关闭并重新打开更持久的窗口(例如控制面板)会导致不必要的屏幕闪烁。在激活不同输入法类的实例之前,会在当前输入法上调用
hideWindows()
。调用此方法的情况包括:
- 当客户端组件接收到FOCUS_LOST事件时,由
InputContext.dispatchEvent
调用。 - 通过用户界面或
InputContext.selectInputMethod
从此输入法切换到不同输入法时。 - 在移除当前客户端组件时,在调用
removeNotify
之前。
- 参数:
-
isTemporary
- 焦点变化是否是临时的
- 当客户端组件接收到FOCUS_LOST事件时,由
-
hideWindows
void hideWindows() -
removeNotify
void removeNotify()通知输入法客户端组件已从其包含层次结构中移除,或者为组件禁用了输入法支持。此方法由
InputContext.removeNotify
调用。仅当输入法处于非活动状态时才会调用此方法。
-
endComposition
void endComposition()结束当前可能正在进行的任何输入组合。根据平台和可能的用户偏好,这可能会提交或删除未提交的文本。对文本的任何更改都通过输入法事件传达给活动组件。文本编辑组件可能在各种情况下调用此方法,例如,当用户将插入点移动到文本内(但在组合文本之外)时,或者当组件的文本保存到文件或复制到剪贴板时。
调用此方法的情况包括:
- 通过
InputContext.endComposition
调用。 - 通过
InputContext.dispatchEvent
在切换到不同客户端组件时。 - 通过用户界面或
InputContext.selectInputMethod
从此输入法切换到不同输入法时。
- 通过
-
dispose
void dispose()释放输入法使用的资源。特别是,输入法应该处理不再需要的窗口并关闭文件。此方法由
InputContext.dispose
调用。仅当输入法处于非活动状态时才会调用此方法。在dispose之后,不会在此实例上调用此接口的任何方法。
-
getControlObject
Object getControlObject()从此输入法返回一个控制对象,或null。控制对象提供控制输入法行为或从输入法获取信息的方法。对象的类型是特定于输入法的类。客户端必须将结果与已知的输入法控制对象类进行比较,并将其转换为适当的类以调用提供的方法。- 返回:
- 来自此输入法的控制对象,或null
-