Module java.desktop
Package java.awt.im.spi

Interface InputMethod


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

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

自 JDK 版本:
1.3
  • Method Details

    • setInputMethodContext

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

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

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

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

      此方法被调用

      • 通过 InputContext.selectInputMethod
      • 通过用户界面切换到此输入法时,如果用户指定了区域设置,或者如果先前选择的输入法的 getLocale 方法返回非 null 值。
      参数:
      locale - 要输入的区域设置
      返回:
      指定的区域设置是否受支持
      抛出:
      NullPointerException - 如果 locale 为 null
    • getLocale

      Locale getLocale()
      返回当前输入区域设置。在特殊情况下可能返回 null。

      此方法被调用

      返回:
      当前输入区域设置,或 null
    • setCharacterSubsets

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

      此方法被调用

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

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

      对于由主机操作系统提供的输入法,通常无法确定是否支持此操作。例如,输入法可能仅为某些区域设置启用组合,并且对于其他区域设置不执行任何操作。对于这种输入法,该方法可能不会抛出 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 为 null
    • 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