默认情况下,每个 Window 实例创建一个 InputContext 实例,并且此输入上下文由窗口容器层次结构中的所有组件共享。然而,这意味着在一个窗口内的任何时间只能进行一次文本输入操作,并且当将焦点从一个文本组件移动到另一个文本组件时需要提交文本。如果不需要,文本组件可以创建自己的输入上下文实例。
Java 平台支持使用 java.awt.im.spi
包中的接口以 Java 编程语言开发的输入法,这些接口可以通过将它们添加到应用程序的类路径来使用。实现也可能支持使用它们运行的平台的本地输入法;但是,并非所有平台和locale都提供输入法。键盘布局由主机平台提供。
如果 (a) 没有安装以 Java 编程语言编写的输入法,并且 (b) Java 平台实现或底层平台不支持本机输入法,则输入法为 unavailable。在这种情况下,仍然可以创建和使用输入上下文;它们的行为由下面的各个方法指定。
- 自从:
- 1.2
- 参见:
-
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述void
dispatchEvent
(AWTEvent event) 向活动输入方法分派事件。void
dispose()
释放此输入上下文使用的资源。void
结束当前可能在此上下文中进行的任何输入合成。从当前输入方法返回一个控件对象,或 null。static InputContext
返回一个新的 InputContext 实例。返回当前输入方法或键盘布局的当前locale。boolean
确定当前输入方法是否启用组合。void
要求当前输入方法从当前客户端组件重新转换文本。void
removeNotify
(Component client) 通知输入上下文客户端组件已从其包含层次结构中删除,或者该组件的输入方法支持已被禁用。boolean
selectInputMethod
(Locale locale) 尝试选择支持给定locale的输入方法或键盘布局,并返回一个值,指示是否已成功选择此类输入方法或键盘布局。void
setCharacterSubsets
(Character.Subset[] subsets) 设置应允许此输入上下文的输入方法输入的 Unicode 字符集的子集。void
setCompositionEnabled
(boolean enable) 根据参数enable
的值,启用或禁用当前的组合输入法。
-
构造方法详细信息
-
InputContext
protected InputContext()构造一个 InputContext。此方法受到保护,因此客户端无法直接实例化 InputContext。输入上下文通过调用getInstance()
获得。
-
-
方法详情
-
getInstance
返回一个新的 InputContext 实例。- 返回:
- 一个新的 InputContext 实例
-
selectInputMethod
尝试选择支持给定locale的输入方法或键盘布局,并返回一个值,指示是否已成功选择此类输入方法或键盘布局。在选择输入方法之前,将执行以下步骤:- 如果当前选择的输入方法或键盘布局支持请求的locale,则它保持选中状态。
- 如果没有可用的输入方法或键盘布局支持请求的locale,则当前输入方法或键盘布局保持选中状态。
- 如果用户先前已经从用户界面为所请求的区域设置选择了输入方法或键盘布局,则重新选择最近选择的此类输入方法或键盘布局。
- 否则,将以依赖于实现的方式选择支持请求的locale的输入方法或键盘布局。
并非所有主机操作系统都提供 API 来确定当前所选本机输入法或键盘布局的区域设置,并根据区域设置选择本机输入法或键盘布局。对于不提供此类 API 的主机操作系统,
selectInputMethod
假定主机操作系统提供的本机输入法或键盘布局仅支持系统的默认区域设置。文本编辑组件可能会调用此方法,例如,当用户更改插入点时,以便用户可以立即继续使用周围文本的语言进行键入。
- 参数:
locale
- 所需的新locale。- 返回:
- 如果在此调用后处于活动状态的输入方法或键盘布局支持所需的locale,则为 true。
- 抛出:
NullPointerException
- 如果locale
为空
-
getLocale
返回当前输入法或键盘布局的当前locale。如果输入上下文没有当前输入法或键盘布局,或者当前输入法的InputMethod.getLocale()
方法返回 null,则返回 null。并非所有主机操作系统都提供 API 来确定当前所选本机输入法或键盘布局的区域设置。对于不提供此类 API 的主机操作系统,
getLocale
假定主机操作系统提供的所有本机输入法或键盘布局的当前locale是系统的默认locale。- 返回:
- 当前输入方法或键盘布局的当前locale
- 自从:
- 1.3
-
setCharacterSubsets
设置应允许此输入上下文的输入方法输入的 Unicode 字符集的子集。可以传入 Null 以指示允许所有字符。初始值为空。该设置适用于当前输入方法以及进行此调用后选择的输入方法。但是,应用程序不能依赖此调用产生预期效果,因为此设置无法传递给所有主机输入方法 - 应用程序仍需要应用自己的字符验证。如果没有可用的输入方法,则此方法无效。- 参数:
subsets
- 可以从中输入字符的 Unicode 字符集的子集
-
setCompositionEnabled
public void setCompositionEnabled(boolean enable) 根据参数enable
的值,启用或禁用当前的组合输入法。为组合启用的输入方法会为组合和控制目的解释传入事件,而禁用的输入方法则不会为组合解释事件。但是请注意,无论输入方法是否启用,事件都会传递给输入方法,并且为组合禁用的输入方法仍可能出于控制目的解释事件,包括为组合启用或禁用自身。
对于主机操作系统提供的输入法,并不总是能够确定是否支持该操作。例如,输入法可能只对某些locale启用组合,而对其他locale不执行任何操作。对于这样的输入法,有可能这个方法不会抛出
UnsupportedOperationException
,也不影响是否启用组合。- 参数:
enable
- 是否启用当前输入法进行合成- 抛出:
UnsupportedOperationException
- 如果当前没有可用的输入法或当前输入法不支持启用/禁用操作- 自从:
- 1.3
- 参见:
-
isCompositionEnabled
public boolean isCompositionEnabled()确定当前输入方法是否启用组合。为组合启用的输入方法会为组合和控制目的解释传入事件,而禁用的输入方法则不会为组合解释事件。- 返回:
true
当前输入法是否启用组合;false
否则- 抛出:
UnsupportedOperationException
- 如果当前没有可用的输入法或者当前输入法不支持检查是否启用合成- 自从:
- 1.3
- 参见:
-
reconvert
public void reconvert()要求当前输入法从当前客户端组件重新转换文本。输入法使用InputMethodRequests.getSelectedText
方法从客户端组件获取要重新转换的文本。其他InputMethodRequests
方法必须准备好处理输入法的进一步信息请求。组合和/或提交的文本将作为InputMethodEvent
的序列发送到客户端组件。如果输入法无法重新转换给定的文本,则该文本将作为提交的文本返回到InputMethodEvent
中。- 抛出:
UnsupportedOperationException
- 如果没有当前可用的输入法或当前输入法不支持重新转换操作。- 自从:
- 1.3
-
dispatchEvent
向活动输入方法分派事件。由 AWT 调用。如果没有可用的输入方法,则永远不会消耗该事件。- 参数:
event
- 事件- 抛出:
NullPointerException
- 如果event
为空
-
removeNotify
通知输入上下文客户端组件已从其包含层次结构中删除,或者该组件的输入法支持已被禁用。此方法通常从客户端组件的Component.removeNotify
方法调用。来自此组件的输入法的潜在待处理输入将被丢弃。如果没有可用的输入法,则此方法无效。- 参数:
client
- 客户端组件- 抛出:
NullPointerException
- 如果client
为空
-
endComposition
public void endComposition()结束当前可能在此上下文中进行的任何输入合成。根据平台和可能的用户偏好,这可能会提交或删除未提交的文本。对文本的任何更改都会使用输入方法事件传达给活动组件。如果没有可用的输入方法,则此方法无效。文本编辑组件可以在多种情况下调用它,例如,当用户在文本内(但在组合文本外)移动插入点时,或者当组件的文本保存到文件或复制到剪贴板时。
-
dispose
public void dispose()释放此输入上下文使用的资源。由 AWT 为每个窗口的默认输入上下文调用。如果没有可用的输入方法,则此方法无效。 -
getInputMethodControlObject
从当前输入方法返回一个控件对象,或 null。控制对象提供控制输入方法行为或从输入方法获取信息的方法。对象的类型是输入方法特定的类。客户端必须将结果与已知的输入方法控制对象类进行比较,并转换为适当的类以调用所提供的方法。如果没有可用的输入方法或者当前输入方法没有提供输入方法控制对象,则返回null。
- 返回:
- 来自当前输入方法的控件对象,或 null。
-