Module java.desktop
Package java.awt.im

Class InputContext

java.lang.Object
java.awt.im.InputContext

public class InputContext extends Object
提供控制文本输入设施的方法,例如输入法和键盘布局。两种方法同时处理输入法和键盘布局:selectInputMethod允许客户端组件按区域设置选择输入法或键盘布局,getLocale允许客户端组件获取当前输入法或键盘布局的区域设置。其他方法更具体地支持与输入法的交互:它们允许客户端组件控制输入法的行为,并将来自客户端组件的事件分派给输入法。

默认情况下,每个Window实例创建一个InputContext实例,并且此输入上下文由窗口容器层次结构中的所有组件共享。但是,这意味着在窗口内一次只能进行一个文本输入操作,并且在从一个文本组件移动焦点到另一个文本组件时需要提交文本。如果不希望这样,文本组件可以创建自己的输入上下文实例。

Java平台支持使用Java编程语言开发的输入法,使用java.awt.im.spi包中的接口,可以通过将它们添加到应用程序的类路径中来提供。实现也可以支持使用运行在其上的平台的本机输入法;但是,并非所有平台和区域设置都提供输入法。键盘布局由主机平台提供。

如果(a)没有安装使用Java编程语言编写的输入法,以及(b)Java平台实现或基础平台不支持本机输入法,则输入法不可用。在这种情况下,仍然可以创建和使用输入上下文;它们的行为由下面的各个方法指定。

自 JDK 版本:
1.2
参见:
  • Constructor Details

    • InputContext

      protected InputContext()
      构造一个InputContext。此方法受保护,因此客户端无法直接实例化InputContext。通过调用getInstance()来获取输入上下文实例。
  • Method Details

    • getInstance

      public static InputContext getInstance()
      返回一个新的InputContext实例。
      返回:
      一个新的InputContext实例
    • selectInputMethod

      public boolean selectInputMethod(Locale locale)
      尝试选择支持给定区域设置的输入法或键盘布局,并返回指示是否已成功选择此类输入法或键盘布局的值。在选择输入法之前会执行以下步骤:
      • 如果当前选择的输入法或键盘布局支持请求的区域设置,则保持选择。
      • 如果没有可用于支持请求的区域设置的输入法或键盘布局,则保持当前选择的输入法或键盘布局。
      • 如果用户以前从用户界面中选择了请求的区域设置的输入法或键盘布局,则重新选择最近选择的此类输入法或键盘布局。
      • 否则,以实现相关的方式选择支持请求的区域设置的输入法或键盘布局。
      在切换到其他输入法之前,任何当前未提交的文本都将被提交。如果没有可用于支持请求的区域设置的输入法或键盘布局,则返回false。

      并非所有主机操作系统都提供API来确定当前选择的本机输入法或键盘布局的区域设置,并通过区域设置选择本机输入法或键盘布局。对于不提供此类API的主机操作系统,selectInputMethod假定由主机操作系统提供的本机输入法或键盘布局仅支持系统的默认区域设置。

      文本编辑组件可以调用此方法,例如,当用户更改插入点时,以便用户可以立即继续使用周围文本的语言进行输入。

      参数:
      locale - 所需的新区域设置。
      返回:
      如果此调用后处于活动状态的输入法或键盘布局支持所需的区域设置,则返回true。
      抛出:
      NullPointerException - 如果locale为null
    • getLocale

      public Locale getLocale()
      返回当前输入法或键盘布局的当前区域设置。如果输入上下文没有当前输入法或键盘布局,或者当前输入法的InputMethod.getLocale()方法返回null,则返回null。

      并非所有主机操作系统都提供API来确定当前选择的本机输入法或键盘布局的区域设置。对于不提供此类API的主机操作系统,getLocale假定由主机操作系统提供的所有本机输入法或键盘布局的当前区域设置为系统的默认区域设置。

      返回:
      当前输入法或键盘布局的当前区域设置
      自 JDK 版本:
      1.3
    • setCharacterSubsets

      public void setCharacterSubsets(Character.Subset[] subsets)
      设置此输入上下文的输入法应允许输入的Unicode字符集的子集。可以传入null以指示允许所有字符。初始值为null。该设置适用于当前输入法以及在进行此调用后选择的输入法。但是,应用程序不能依赖此调用产生期望的效果,因为此设置无法传递给所有主机输入法 - 应用程序仍然需要应用自己的字符验证。如果没有可用的输入法,则此方法不起作用。
      参数:
      subsets - 可以输入字符的Unicode字符集的子集
    • setCompositionEnabled

      public void setCompositionEnabled(boolean enable)
      根据参数enable的值,启用或禁用当前输入法进行组合。

      已启用组合的输入法会解释传入事件用于组合和控制目的,而已禁用的输入法不会解释用于组合的事件。但是请注意,事件将传递给输入法,无论其是否已启用,已禁用的输入法仍可能解释用于控制目的的事件,包括启用或禁用自身进行组合。

      对于由主机操作系统提供的输入法,不一定能确定是否支持此操作。例如,输入法可能仅为某些区域设置启用组合,并对其他区域设置不执行任何操作。对于这种输入法,可能此方法不会抛出UnsupportedOperationException,但也不会影响组合是否已启用。

      参数:
      enable - 是否启用当前输入法进行组合
      抛出:
      UnsupportedOperationException - 如果没有可用的当前输入法或当前输入法不支持启用/禁用操作
      自 JDK 版本:
      1.3
      参见:
    • isCompositionEnabled

      public boolean isCompositionEnabled()
      确定当前输入法是否已启用组合。已启用组合的输入法会解释传入事件用于组合和控制目的,而已禁用的输入法不会解释用于组合的事件。
      返回:
      如果当前输入法已启用组合,则返回true;否则返回false
      抛出:
      UnsupportedOperationException - 如果没有可用的当前输入法或当前输入法不支持检查是否已启用组合
      自 JDK 版本:
      1.3
      参见:
    • reconvert

      public void reconvert()
      请求当前输入法从当前客户端组件重新转换文本。输入法使用InputMethodRequests.getSelectedText方法从客户端组件获取要重新转换的文本。其他InputMethodRequests方法必须准备处理输入法的进一步信息请求。组合和/或已提交的文本将作为一系列InputMethodEvent发送到客户端组件。如果输入法无法重新转换给定的文本,则文本将作为已提交文本在InputMethodEvent中返回。
      抛出:
      UnsupportedOperationException - 如果没有当前可用的输入法或当前输入法不支持重新转换操作。
      自1.3版本起:
      1.3
    • dispatchEvent

      public void dispatchEvent(AWTEvent event)
      将事件分派给活动输入法。由AWT调用。如果没有可用的输入法,则事件将永远不会被消耗。
      参数:
      event - 事件
      抛出:
      NullPointerException - 如果event为null
    • removeNotify

      public void removeNotify(Component client)
      通知输入上下文,客户端组件已从其包含层次结构中移除,或者已为组件禁用输入法支持。通常从客户端组件的Component.removeNotify方法中调用此方法。对于此组件的输入法可能挂起的输入将被丢弃。如果没有可用的输入法,则此方法不起作用。
      参数:
      client - 客户端组件
      抛出:
      NullPointerException - 如果client为null
    • endComposition

      public void endComposition()
      结束当前可能正在进行的输入组合。根据平台和可能的用户偏好,这可能会提交或删除未提交的文本。对文本的任何更改都通过输入法事件传达给活动组件。如果没有可用的输入法,则此方法不起作用。

      文本编辑组件可能在各种情况下调用此方法,例如,当用户将插入点移动到文本内(但在组合文本之外)时,或者当组件的文本保存到文件或复制到剪贴板时。

    • dispose

      public void dispose()
      释放此输入上下文使用的资源。由AWT为每个窗口的默认输入上下文调用。如果没有可用的输入法,则此方法不起作用。
    • getInputMethodControlObject

      public Object getInputMethodControlObject()
      返回当前输入法的控制对象,或null。控制对象提供控制输入法行为或从输入法获取信息的方法。对象的类型是特定于输入法的类。客户端必须将结果与已知的输入法控制对象类进行比较,并将其转换为适当的类以调用提供的方法。

      如果没有可用的输入法或当前输入法不提供输入法控制对象,则返回null。

      返回:
      当前输入法的控制对象,或null。