Как правильно выровнять содержимое TextArea в LWUIT?
Я хочу выровнять текст в TextArea
направо. Я попробовал следующий код:
Form form = new Form();
TextArea textArea = new TextArea("Some Arabic text ...");
textArea.setRTL(true);
textArea.setAlignment(RIGHT);
form.addComponent(textArea);
Результатом было просто перемещение прокрутки влево,
Но текст все еще не выровнен RIGHT
,
проверьте изображение ниже:
Так как выровнять контент с RIGHT
?
2 ответа
Это может показаться сумасшедшим для первого случая:), но установив выравнивание в TextArea.LEFT
решил проблему и теперь это 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);
}
А также drawTextArea
метод в DefaultLookAndFeel
как следует:
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
Вот почему он соответствует значению в переключателе и был приведен в соответствие RIGHT
Кстати, если вы установите
textArea.setAlignment(Component.RIGHT);
это также будет неправильно, потому что Component.RIGHT
вне метода рисования имеет значение 3, а не 1!
Вам нужно только написать "TextArea.RIGHT" вместо "RIGHT"
textArea.setAlignment(TextArea.RIGHT);
Вы можете использовать следующую строку:
TextArea textArea = new TextArea("Some Arabic text ...");
textArea.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);