Как правильно выровнять содержимое 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);
Другие вопросы по тегам