Module  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并且不会改变其行为。

        调用这个方法

        • InputContext.selectInputMethod
        • 如果用户指定了区域通过所述用户界面切换到这个输入方法或当如果先前选择的输入方法的getLocale方法返回一个非空值。
        参数
        locale - 区域到输入
        结果
        是否支持指定的区域设置
        异常
        NullPointerException - 如果 locale为空
      • getLocale

        Locale getLocale​()
        返回当前的输入区域设置。 在异常情况下可能返回null。

        调用这个方法

        结果
        当前输入区域设置,或null
      • setCharacterSubsets

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

        调用这个方法

        参数
        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调用

        仅当输入法不活动时才调用该方法。 处理后,此实例没有调用此接口的方法。

      • getControlObject

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

        此方法由InputContext.getInputMethodControlObject调用

        结果
        来自此输入法的控件对象,或null