Module  java.desktop
软件包  java.awt.im

Class InputContext



  • public class InputContext
    extends Object
    提供控制文本输入设备(如输入法和键盘布局)的方法。 两种方法处理输入法和键盘布局:selectInputMethod允许客户端组件通过语言环境选择输入法或键盘布局,getLocale允许客户端组件获取当前输入法或键盘布局的区域设置。 其他方法更具体地支持与输入法的交互:它们允许客户端组件控制输入方法的行为,并将事件从客户端组件分派到输入法。

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

    Java Platform支持使用Java编程语言开发的输入法,使用java.awt.im.spi软件包中的接口,并将其作为扩展安装到Java SE运行时环境中。 实施还可以支持使用他们运行的平台的本机输入方法; 然而,并不是所有的平台和区域设置都提供输入法。 键盘布局由主机平台提供。

    如果(a)用Java编程语言没有任何输入法已经安装和(b)的Java平台实现或基础平台不支持本机输入法输入法是不可用的 在这种情况下,仍然可以创建和使用输入上下文; 他们的行为是用以下各种方法指定的。

    从以下版本开始:
    1.2
    另请参见:
    Component.getInputContext()Component.enableInputMethods(boolean)
    • 构造方法详细信息

      • InputContext

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

      • getInstance

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

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

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

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

        参数
        locale - 所需的新区域。
        结果
        如果在此调用后活动的输入法或键盘布局支持所需的语言环境,则为true。
        异常
        NullPointerException - 如果 locale为空
      • getLocale

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

        并非所有主机操作系统都提供API来确定当前选定的本地输入法或键盘布局的区域设置。 对于主机操作系统不提供这样的API, getLocale假设由主机操作系统提供的所有本机输入方法或键盘布局的当前语言环境是该系统的默认语言环境。

        结果
        当前输入法的当前语言环境或键盘布局
        从以下版本开始:
        1.3
      • setCharacterSubsets

        public void setCharacterSubsets​(Character.Subset[] subsets)
        设置输入上下文输入方法的Unicode字符集的子集。 可以传入空值以表示允许所有字符。 初始值为null。 该设置适用于当前输入方法以及在进行此呼叫后选择的输入方法。 然而,应用程序不能依赖此调用具有所需的效果,因为此设置不能传递到所有主机输入方法 - 应用程序仍然需要应用自己的字符验证。 如果没有可用的输入法,则此方法无效。
        参数
        subsets - 可以输入字符的Unicode字符集的子集
      • setCompositionEnabled

        public void setCompositionEnabled​(boolean enable)
        根据参数enable的值启用或禁用组合的当前输入法。

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

        对于由主机操作系统提供的输入方法,并不总是能够确定是否支持该操作。 例如,输入法可以仅为某些区域设置进行组合,而对其他区域设置也不起作用。 对于这样的输入方法,这种方法可能不会抛出UnsupportedOperationException ,而且也不影响组合是否启用。

        参数
        enable - 是否启用当前输入法的组合
        异常
        UnsupportedOperationException - 如果没有可用的当前输入法或当前输入法不支持使能/禁止操作
        从以下版本开始:
        1.3
        另请参见:
        isCompositionEnabled()
      • isCompositionEnabled

        public boolean isCompositionEnabled​()
        确定组合是否启用当前输入法。 允许组合解释组合和控制目的的传入事件的输入法,而禁用的输入法不会解释组合的事件。
        结果
        true如果当前的输入法启用了组合; 否则为false
        异常
        UnsupportedOperationException - 如果没有当前的输入方法可用或当前输入法不支持检查是否启用组合
        从以下版本开始:
        1.3
        另请参见:
        setCompositionEnabled(boolean)
      • 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。