模块 java.desktop

类 InputContext

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

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

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

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

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

自从:
1.2
参见:
  • 构造方法详细信息

    • InputContext

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

    • getInstance

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

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

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

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

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

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

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

      返回:
      当前输入方法或键盘布局的当前locale
      自从:
      1.3
    • setCharacterSubsets

      public void setCharacterSubsets(Character.Subset [] subsets)
      设置应允许此输入上下文的输入方法输入的 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

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

      public void removeNotify(Component  client)
      通知输入上下文客户端组件已从其包含层次结构中删除,或者该组件的输入法支持已被禁用。此方法通常从客户端组件的 Component.removeNotify 方法调用。来自此组件的输入法的潜在待处理输入将被丢弃。如果没有可用的输入法,则此方法无效。
      参数:
      client - 客户端组件
      抛出:
      NullPointerException - 如果 client 为空
    • endComposition

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

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

    • dispose

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

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

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

      返回:
      来自当前输入方法的控件对象,或 null。