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

Class InputContext


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

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

    Java平台支持使用java.awt.im.spi软件包中的接口以Java编程语言开发的输入方法,可以通过将它们添加到应用程序的类路径来实现。 实现还可以支持使用它们运行的平台的本机输入方法; 但是,并非所有平台和语言环境都提供输入方法。 键盘布局由主机平台提供。

    如果(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以指示允许所有字符。 初始值为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调用每个Window的默认输入上下文。 如果没有可用的输入方法,则此方法无效。
      • getInputMethodControlObject

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

        如果没有可用的输入方法或当前输入方法不提供输入方法控制对象,则返回null。

        结果
        来自当前输入方法的控件对象,或null。