Это может показаться сумасшедшим для первого случая :), но установка выравнивания на 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!