-
public interface InputMethod
定义支持复杂文本输入的输入方法的接口。 传统上,输入法支持文本输入,这些语言的字符数多于标准大小键盘上可以表示的字符,例如中文,日文和韩文。 但是,它们也可用于支持英语的语音文本输入或泰语的字符重新排序。InputMethod的子类可以由输入法框架加载; 然后可以通过API(
InputContext.selectInputMethod
)或用户界面(输入法选择菜单)选择它们。- 从以下版本开始:
- 1.3
-
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 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字符集的子集。 可以传入Null以指示允许所有字符。调用此方法
- 在实例化此输入法后立即执行
- 当从不同的方法切换到这种输入方法时,和
- 由
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()
。调用此方法
- 当客户端组件收到FOCUS_LOST事件时,通过
InputContext.dispatchEvent
, - 使用用户界面或
InputContext.selectInputMethod
从此输入法切换到另一种输入法时, - 如果删除了当前客户端组件,则在
removeNotify
之前。
- 参数
-
isTemporary
- 焦点变化是否是暂时的
- 当客户端组件收到FOCUS_LOST事件时,通过
-
hideWindows
void hideWindows()
-
removeNotify
void removeNotify()
-
endComposition
void endComposition()
结束当前可能在此上下文中进行的任何输入组合。 根据平台和可能的用户首选项,这可能会提交或删除未提交的文本。 使用输入方法事件将对文本的任何更改传递给活动组件。文本编辑组件可以在各种情况下调用它,例如,当用户在文本内移动插入点(但在组合文本之外)时,或者当组件的文本被保存到文件或复制到剪贴板时。
调用此方法
- 由
InputContext.endComposition
, - 切换到不同的客户端组件时通过
InputContext.dispatchEvent
- 使用用户界面或
InputContext.selectInputMethod
从此输入方法切换到其他方法时。
- 由
-
dispose
void dispose()
释放此输入方法使用的资源。 特别是,输入方法应该处理窗口并关闭不再需要的文件。该方法由
InputContext.dispose
调用 。仅在输入方法处于非活动状态时才调用该方法。 在dispose之后,此实例上没有调用此接口的方法。
-
getControlObject
Object getControlObject()
从此输入方法返回一个控件对象,或者为null。 控制对象提供控制输入方法的行为或从输入方法获取信息的方法。 对象的类型是特定于输入方法的类。 客户端必须将结果与已知的输入方法控制对象类进行比较,并转换为适当的类以调用所提供的方法。- 结果
- 来自此输入方法的控件对象,或null
-
-