JAVA输入法框架协议

输入法框架协议

框架架构

JAVA输入法框架协议

  • 输入法客户端API定义了文本输入的类和接口
  • AWT组件提供了on-the-spot或者over-the-spot两种组合方式(英文原文为composition)
  • context management管理与输入法的通信
  • 输入法引擎SPI定义了集成到输入法框架的接口

为了使用带输入法管理的本地输入法,适配器需要转换输入法使用的数据和输入法框架使用的数据,还要提供组合窗口(英文原文为composition window)。

客户端组件

  • Active clients

getInputMethodRequests返回非空,实现InputMethodListener接口

处理来自输入法的事件、请求信息并绘制文本

  • Non-clients

关闭了输入法

  • Peered clients

TextComponent子类

实现独立,对输入法的支持可能受限

在Windows上,和Active clients类似

在Solaris上,仅仅支持接收本地输入法的输入,且不支持below-the-spot输入风格

注:我就想知道WHY

  • Passive clients

不使用输入法客户端API,但接收输入法的文本输入

客户端组件不负责绘制候选列表,不负责控制输入法行为的用户界面元素(英文原文为:user interface elements)。根据平台的不同,这些任务甩锅给输入法,本地输入法管理器,输入法框架

输入法不关心客户端组件间的不同,它是与输入法框架进行交互,输入法框架负责提供接口,并在内部处理客户端组件的不同。

输入风格

输入法框架支持三种

  • On-the-spot

客户端组件绘制排版后的文本,但是需要显示文本是否需要被输入法转换或者确认

  • Below-the-spot

文本在单独的窗口中显示,这个窗口是在插入点的下方,文本会在提交后插入。

窗口打开时会先计算窗口的位置,提交后会更新位置

注:这个应该就是平时使用的,但是为什么linux不支持

  • Root-window

不管窗口位置

选用on-the-spot还是below-the-spot取决于系统属性或者AWT属性java.awt.im.style(注:这个属性怎么拿到?)

系统属性可以从命令行定义,AWT属性在awt.properties文件中(注:文件在哪?)

Support for below-the-spot input with native input methods is platform dependent. It is supported on Windows, but not on Solaris. Where it is not supported, on-the-spot input is used instead.

注:为什么不支持,到底哪里的代码有问题

输入法引擎和适配器

SPI用于本地输入法适配器,它连接与本地输入法管理器集成的本地输入法,比如XIM

上下文管理

(未完待续)