在 Java 开发过程中支持双向字符集语言(BiDi) - 编程入门网
.LEFT);
…
label.setHorizontalAlignment(SwingConstants.LEFT);
为了使控件能够按照 ComponentOrientation 指定的全局方向显示内容,开发人员应该避 免在生成控件或者指定对齐方式的时候,使用左常量 SwingConstants.LEFT,右常量 SwingConstants.RIGHT。开发人员应该使用专门支持 BiDi 的常量 SwingConstants.LEADING ,SwingConstants.TRAILING 来指定对齐方式。 在使用 JLabel 和 JButton 控件的时候,需要注意对齐方式的取值问题。当然对于继承 了这两个类的控件,例如 class DefaultTableCellRenderer extends JLabel,也需要注意 不要直接使用左常量 SwingConstants.LEFT,右常量 SwingConstants.RIGHT。 Eclipse 对 BiDi 的支持 Eclipse 是目前开发人员最为推崇的 Java 集成开发工具。Eclipse 的图形开发可以基于 Eclipse 特有的 SWT 和 JFace 架构。 图 9. Eclipse Platform architecture 在 Java 开发过程中支持双向字符集语言(BiDi)(7)时间:2011-04-30 IBM 赵一三前面已经说过 Swing 是纯 Java 的实现,而 SWT 则有点类似与 AWT,是 Java 与 JNI 的混合,当然具体的实现和 AWT 是完全不同的。至于 Swing 和 SWT 的优劣比较,不在本文 的介绍范围之内。这方面的内容在网络上有很多,仁者见仁,智者见智。 回到本文,因为 Eclipse 采用了和 Swing 截然不同的图形库,在 BiDi 支持方面也有不 同的要求。根据笔者的开发经验,在 Eclipse 上开发图形应用程序,基本上不需要特殊的编 程处理,BiDi 的实现细节都已经封装在 SWT/JFace 的图形控件里面。只需要将区域设置设 定为双向字符集的地区,启动 Eclipse 应用程序,程序就会自动启动 BiDi 的支持。 总体来说,采用 Eclipse 开发支持 BiDi 的 Java 图形应用,相对于 Swing 来说,工作 量大为减轻。 常见 BiDi 问题以及分析,解决技巧 LRM(\u200F)/RLM(\u200E) 符号的使用 在双向字符集语言中,标点符号的处理是 BiDi 算法中一个需要特别关注的地方。在 BiDi 中,所有的非标点符号被称为“强”字符。而标点符号既可以是从左向右 LTR 也可以 是从右向左 RTL。因为不含任何的方向信息,所以被称为“弱”字符。通常是由软件根据 BiDi 算法来决定标点符号放置的方向。 在 BiDi 算法中,如果标点符号放在两段有相同方向文字的中间,标点符号将继承相同的 方向。如果标点符号放在两段有不同方向的文字中间,标点符号将继承全局方向。如果一个 “弱”字符紧挨着一个“弱”字符,BiDi 算法将根据最近相邻的“强”字符来决定字符方向 。在某些情况下,这会导致非预期的情况出现。为了纠正错误,需要使用“伪强”字符 (U200E RLM 或者 U200F RLM)插入到文字中间来调整字符的显示。下面就用具体的示例来 说明如何使用这两个符号来调整内容的显示。 有如下一段英文“UDDI inquiry URL:”,开发人员要将这段文字的阿拉伯文字(单词 UDDI 和 URL 不需要翻译)在界面上用 JLabel 控件展示出来,并注意 对齐方式 章节涉及 的内容。在界面上文字的显示如图 10 所示。 图 10. 标点符号在右侧 这段文字的阿拉伯资源为“URL \u0644\u0637\u0644\u0628 UDDI:”,标点符号在显示的 时候应该在英文单词的左侧,而实际上 Swing 却把这个符号显示在了右侧,甚至把两侧的英 文显示也颠倒了。 为了正确的显示这段文字,开发人员需要在上面的阿拉伯资源前增加一个 LRM(\u200F) 来强行指定文字的方向。文字的正确显示如图 11 所示
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |