模块 java.desktop

接口 InputMethod


public interface InputMethod
定义支持复杂文本输入的输入方法的接口。输入方法传统上支持字符数多于标准尺寸键盘所能表示的语言的文本输入,例如中文、日语和韩语。但是,它们也可用于支持英语的语音文本输入或泰语的字符重新排序。

输入法框架可以加载InputMethod的子类;然后可以通过 API (InputContext.selectInputMethod ) 或用户界面(输入法选择菜单)选择它们。

自从:
1.3
  • 方法总结

    修饰符和类型
    方法
    描述
    void
    激活用于即时输入处理的输入方法。
    void
    deactivate(boolean isTemporary)
    停用输入方法。
    void
    将事件分派到输入方法。
    void
    释放该输入方法占用的资源。
    void
    结束当前可能在此上下文中进行的任何输入合成。
    从此输入方法返回一个控件对象,或为 null。
    返回当前输入locale。
    void
    关闭或隐藏由此输入方法实例或其类打开的所有窗口。
    boolean
    确定是否启用此输入方法。
    void
    通知此输入方法客户端窗口位置或状态的更改。
    void
    开始重新转换操作。
    void
    通知输入方法客户端组件已从其包含层次结构中删除,或者该组件的输入方法支持已被禁用。
    void
    设置允许该输入方法输入的Unicode字符集的子集。
    void
    setCompositionEnabled(boolean enable)
    根据参数 enable 的值启用或禁用此输入法进行组合。
    void
    设置输入方法上下文,用于将输入方法事件分派给客户端组件并从客户端组件请求信息。
    boolean
    setLocale(Locale locale)
    尝试设置输入locale。
  • 方法详情

    • setInputMethodContext

      void setInputMethodContext(InputMethodContext  context)
      设置输入方法上下文,用于将输入方法事件分派给客户端组件并从客户端组件请求信息。

      在实例化此输入方法后立即调用一次此方法。

      参数:
      context - 此输入法的输入法上下文
      抛出:
      NullPointerException - 如果 context 为空
    • setLocale

      boolean setLocale(Locale  locale)
      尝试设置输入locale。如果输入方法支持所需的locale,它会更改其行为以支持locale的输入并返回 true。否则,它返回 false 并且不改变它的行为。

      这个方法叫做

      参数:
      locale - 输入locale
      返回:
      是否支持指定的locale
      抛出:
      NullPointerException - 如果 locale 为空
    • getLocale

      Locale  getLocale()
      返回当前输入locale。在特殊情况下可能会返回 null。

      这个方法叫做

      返回:
      当前输入locale,或 null
    • setCharacterSubsets

      void setCharacterSubsets(Character.Subset [] subsets)
      设置允许该输入方法输入的Unicode字符集的子集。可以传入 Null 以指示允许所有字符。

      这个方法叫做

      参数:
      subsets - 可以从中输入字符的 Unicode 字符集的子集
    • setCompositionEnabled

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

      为组合启用的输入方法会为组合和控制目的解释传入事件,而禁用的输入方法则不会为组合解释事件。但是请注意,无论输入方法是否启用,事件都会传递给输入方法,并且为组合禁用的输入方法仍可能出于控制目的解释事件,包括为组合启用或禁用自身。

      对于主机操作系统提供的输入法,并不总是能够确定是否支持该操作。例如,输入法可能只对某些locale启用组合,而对其他locale不执行任何操作。对于这样的输入法,有可能这个方法不会抛出UnsupportedOperationException ,也不影响是否启用组合。

      这个方法叫做

      参数:
      enable - 是否启用输入法进行合成
      抛出:
      UnsupportedOperationException - 如果此输入法不支持启用/禁用操作
      参见:
    • isCompositionEnabled

      boolean isCompositionEnabled()
      确定是否启用此输入方法。为组合启用的输入方法会为组合和控制目的解释传入事件,而禁用的输入方法则不会为组合解释事件。

      这个方法叫做

      返回:
      true 如果此输入法启用组合; false否则。
      抛出:
      UnsupportedOperationException - 如果此输入法不支持检查是否启用了组合
      参见:
    • reconvert

      void reconvert()
      开始重新转换操作。输入法使用 InputMethodRequests.getSelectedText 方法从当前客户端组件获取要重新转换的文本。它可以使用其他 InputMethodRequests 方法来请求重新转换操作所需的其他信息。操作生成的组合和提交文本作为 InputMethodEvent 序列发送到客户端组件。如果无法重新转换给定的文本,则应将相同的文本作为提交的文本发送到客户端组件。

      此方法由 InputContext.reconvert 调用。

      抛出:
      UnsupportedOperationException - 如果输入法不支持再转换操作。
    • dispatchEvent

      void dispatchEvent(AWTEvent  event)
      将事件分派到输入法。如果为焦点组件启用了输入法支持,某些类型的传入事件在被分派到组件的方法或事件监听器之前被分派到该组件的当前输入法。输入法决定是否需要处理该事件。如果是,它还会调用事件的 consume 方法;这会导致事件不会被分派到组件的事件处理方法或事件监听器。

      如果事件是 InputEvent 或其子类的实例,则事件将被调度。这包括 AWT 类 KeyEvent 和 MouseEvent 的实例。

      此方法由 InputContext.dispatchEvent 调用。

      参数:
      event - 被分派到输入法的事件
      抛出:
      NullPointerException - 如果 event 为空
    • notifyClientWindowChange

      void notifyClientWindowChange(Rectangle  bounds)
      通知此输入法客户端窗口位置或状态的更改。当此输入法是其输入上下文的当前输入法并启用通知时调用此方法(请参阅 InputMethodContext.enableClientWindowNotification )。如果调用输入上下文的 removeNotify 方法,则暂时挂起对该方法的调用,并在为新的客户端组件激活输入法时恢复。它在以下情况下被调用:
      • 当包含当前客户端组件的窗口在位置、大小、可见性、图标化状态或窗口关闭时发生变化。
      • enableClientWindowNotification(inputMethod, true) 如果当前客户端组件存在,
      • 在调用 enableClientWindowNotification(inputMethod, true) 后首次激活输入法时,如果在调用期间没有当前客户端组件可用,
      • 在调用输入上下文的 removeNotify 方法后激活新客户端组件的输入方法时。
      参数:
      bounds - 客户端窗口的 bounds 在屏幕上;如果客户端窗口图标化或不可见,则为 null
    • activate

      void activate()
      激活用于即时输入处理的输入方法。

      如果输入方法提供自己的窗口,此时应确保所有必要的窗口都已打开且可见。

      这个方法叫做

      该方法仅在输入方法处于非活动状态时调用。假定新实例化的输入方法是非活动的。
    • deactivate

      void deactivate(boolean isTemporary)
      停用输入法。 isTemporary 参数与 FocusEvent.isTemporary 中的含义相同。

      如果输入法提供了自己的窗口,那么此时只应关闭与当前组合相关的窗口(例如查找选择窗口)。对于不同的客户端组件,输入法可能会立即再次激活,并且关闭和重新打开更持久的窗口(例如控制面板)会产生不必要的屏幕闪烁。在激活不同输入法类的实例之前,hideWindows() 在当前输入法上被调用。

      这个方法叫做

      该方法仅在输入方法处于活动状态时调用。
      参数:
      isTemporary - 焦点变化是否是暂时的
    • hideWindows

      void hideWindows()
      关闭或隐藏由此输入方法实例或其类打开的所有窗口。

      这个方法叫做

      • 在不同输入法类的实例上调用 activate 之前,
      • 在此输入法上调用 dispose 之前。
      该方法仅在输入方法处于非活动状态时调用。
    • removeNotify

      void removeNotify()
      通知输入方法客户端组件已从其包含层次结构中删除,或者该组件的输入方法支持已被禁用。

      此方法由 InputContext.removeNotify 调用。

      该方法仅在输入方法处于非活动状态时调用。

    • endComposition

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

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

      这个方法叫做

    • dispose

      void dispose()
      释放该输入方法占用的资源。特别是,输入方法应该处理窗口并关闭不再需要的文件。

      此方法由 InputContext.dispose 调用。

      该方法仅在输入方法处于非活动状态时调用。 dispose 之后,不会在此实例上调用此接口的任何方法。

    • getControlObject

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

      此方法由 InputContext.getInputMethodControlObject 调用。

      返回:
      来自此输入方法的控制对象,或 null