Как правильно настроить содержимое TextArea в LWUIT? - PullRequest
2 голосов
/ 29 ноября 2011

Я хочу выровнять текст в TextArea вправо.Я попробовал следующий код:

     Form form = new Form();
     TextArea textArea = new TextArea("Some Arabic text ...");
     textArea.setRTL(true);
     textArea.setAlignment(RIGHT);
     form.addComponent(textArea);


В результате мы просто переместили прокрутку влево,
Но текст все еще не выровнен RIGHT,
. Проверьте изображение ниже:

enter image description here

Итак, как выровнять содержимое с RIGHT?

Ответы [ 3 ]

2 голосов
/ 29 ноября 2011

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

1 голос
/ 29 ноября 2011

Вам нужно только написать 'TextArea.RIGHT' вместо 'RIGHT'

textArea.setAlignment(TextArea.RIGHT);
0 голосов
/ 24 июня 2019

Вы можете использовать следующую строку:

TextArea textArea = new TextArea("Some Arabic text ...");
textArea.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
...