模块  java.desktop
软件包  java.awt.im.spi

Interface InputMethod


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

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

    从以下版本开始:
    1.3
    • 方法详细信息

      • setInputMethodContext

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

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

        参数
        context - 此输入方法的输入方法上下文
        异常
        NullPointerException - 如果 context为空
      • setLocale

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

        调用此方法

        参数
        locale - 要输入的区域设置
        结果
        是否支持指定的语言环境
        异常
        NullPointerException - 如果 locale为空
      • 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()
      • 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