這聽起來很瘋狂一審:)但對齊設置爲TextArea.LEFT
解決問題「TextArea.RIGHT」,現在是RIGHT
對齊!
Form form = new Form();
TextArea textArea = new TextArea("Some Arabic text ...");
textArea.setRTL(true);
textArea.setAlignment(TextArea.LEFT);
form.addComponent(textArea);
將其設置爲LEFT
,使顯示的文本對齊RIGHT
!
或者通過移除textArea.setRTL(true)
這是鏡像顯示
Form form = new Form();
TextArea textArea = new TextArea("Some Arabic text ...");
textArea.setAlignment(TextArea.RIGHT);
form.addComponent(textArea);
對於那些當它被設置爲RTL誰感興趣的更復雜的細節:
paint
方法TextArea
類是
public void paint(Graphics g) {
UIManager.getInstance().getLookAndFeel().drawTextArea(g, this);
}
而在DefaultLookAndFeel
drawTextArea
方法如下:
int align = ta.getAbsoluteAlignment();
// remaining code is here in initial source
switch(align) {
case Component.RIGHT:
x = ta.getX() + ta.getWidth() - rightPadding - f.stringWidth(displayText);
break;
// remaining code is here in initial source
}
g.drawString(displayText, x, y);
不幸TextArea.RIGHT
值爲3
但調用ta.getAbsoluteAlignment()
當它返回1(儘管該對象的對準是通過代碼設定到TextArea.RIGHT
!!)
同時TextArea.Left
值爲1
這就是爲什麼它匹配t他在開關量,並對準RIGHT
順便說一句,如果你設置
textArea.setAlignment(Component.RIGHT);
這也將是錯誤的,因爲Component.RIGHT
paint方法外面的值是3而不是1!
當您爲'TextArea'激活** RTL **時,文本渲染的方向將反轉,因此Left被視爲正確。我建議你通過填寫@ [LWUIT Java表單](http://www.java.net/forums/mobile-embedded/lwuit)來從Shai得到澄清。從而爲LWUIT社區做出貢獻。 – Vimal
Vimal是正確的。這聽起來很奇怪,但一旦你想到它就很有意義。當你激活bidi時,你有效地倒轉了顯示器,所以右邊是左邊,東邊是西邊...這對於RTL應用程序來說是有意義的,因爲在這些應用程序中,99%的UI組件要與英文版完全相反,因此您可以編寫英文用戶界面,並通過翻譯和翻轉雙向交換機將其本地化爲bidi。 –
是的,它可以通過刪除我的初始文章中的這一行代碼來完成:** textArea.setRTL(true); **和保持原樣。感謝這寶貴的意見! –