在Swing中使用Urdu字体输入文本时,不会显示英文字符
这与我之前的问题类似,但该解决方案在这里不起作用。 正如前一个问题中所提到的,我正在开发一个跨平台(Windows / Ubuntu)应用程序,该应用程序必须将英语音译为几种官方印度语言之一。 该应用程序具有自定义输入法,并且使用英语键入并按空格键会将键入的文本音译为特定的本地语言。 乌尔都语从右到左与其他人不同,如阿拉伯语/希伯来语。 我设法找到一个具有英语和乌尔都语字形的开放式许可乌尔都语字体 ,但是当我用英语输入字符时,什么都没有出现。
我不明白它是字体绘画问题,还是与输入法有关。 到目前为止,如果我禁用此语言的自定义输入法( InputMethod.dispatchEvent()
),我可以看到英文文本(但当然不会发生音译)。
我的发现:
- 将字体更改为Windows内置的阿拉伯字体之一 – 结果相同。
- 我没有使用
ComponentOrientation
来对齐文本字段中的文本,而是在语言环境为Urdu时使用了setHorizontalAlignment
。 结果相同。 - 在Windows上
sun.awt.windows.WInputMethod
JDK的默认输入法提供程序(sun.awt.windows.WInputMethod
)。 在这里,我看到dispatchEvent()
对OS进行本机调用以处理IME。 我不能在这做到这一点。 - 找到希伯来语的自定义IM – 我的
dispatchEvent()
版本基本相同。 - 在Eclipse中逐步执行
JTextField
代码 – 无法在AbstractDocument
和子类中找到任何内容。AbstractDocument.insertUpdate()
方法检查并更新双向文本输入,但没有任何其他重要内容。
我无法理解dispatchEvent()
调用后会发生什么。 正在注册字符,即音译引擎能够检测到键入的字符并处理它们,但它们不会显示在屏幕上。
解决方法
如果我让文本字段的方向与常规的从左到右语言一样,我可以看到英文文本。 但是,这对乌尔都语用户来说是不可接受的。
有人能指出我正确的方向吗?
我将语言环境设置为
ur_IN
。
遗憾的是, ur_IN
不属于受支持的语言环境 ; 我只看到en_IN
和hi_IN
。 在引用的示例中 ,我使用以下代码来获取下面的图像:
spinner.setLocale(new Locale("hi", "IN"));