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
上下文管理
(未完待续)