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