Как разместить текст TextArea в его центре?

У меня есть диалог и TextArea, TextArea Компонент имеет выравнивание, установленное на Component.CENTER, Я создал метод с именем affiche() который отображает диалог:

public class Alert extends Dialog {
    private TextArea chp;
    private Command[] comms;
    public Alert(String text, Command[] comms)
    {
        super();
        this.comms = comms;
        setAutoDispose(true);
        for (int c=0; c<comms.length; c++)
            addCommand(comms[c]);
        chp = new TextArea(text);
        chp.setAlignment(Component.CENTER);
        chp.setEditable(false);
        chp.getSelectedStyle().setBorder(null);
        chp.getUnselectedStyle().setBorder(null);
        chp.getSelectedStyle().setBgColor(this.getStyle().getBgColor());
        chp.getUnselectedStyle().setBgColor(this.getStyle().getBgColor());
        chp.setRowsGap(3);
    }
    public Command affiche()
    {
        return show(null, chp, comms);
    }
}

Моя проблема в том, что текст отображается в верхней части TextArea при вызове affiche() метод из другой формы.

Итак, как отобразить текст в центре TextArea? Под "центром" я подразумеваю центр по ширине и центр по высоте. Я уже установил горизонтальное выравнивание по центру по коду chp.setAlignment(Component.CENTER);, поэтому я хочу знать, как установить вертикальное выравнивание?

2 ответа

Решение

Я нашел решение без использования класса DefaultLookAndFeel. Вот:

public class Alert extends Dialog {
    private TextArea chp;
    private Command[] comms;
    public Alert(String text, Command[] comms)
    {
        super();
        this.comms = comms;
        setAutoDispose(true);
        for (int c=0; c<comms.length; c++)
            addCommand(comms[c]);

        chp = new TextArea();
        chp.setAlignment(Component.CENTER);
        chp.setEditable(false);
        chp.getSelectedStyle().setBorder(null);
        chp.getUnselectedStyle().setBorder(null);
        chp.getSelectedStyle().setBgColor(this.getStyle().getBgColor());
        chp.getUnselectedStyle().setBgColor(this.getStyle().getBgColor());
        while (text.substring(0, (text.length()/2)+1).length() < chp.getMaxSize()/2)
        {
           text = " ".concat(text);
        }
        chp.setText(text);
    }
    public Command affiche()
    {
        return show(null, chp, comms);
    }
}

Так что я просто добавил while код. И это работает!

Мой предыдущий ответ был неправильным, я забыл, что мы сделали сейчас...

TextArea поддерживает выравнивание по центру, несмотря на то, что недокументированное просто устанавливает стиль выравнивания по центру, и это будет работать из коробки.

Другие вопросы по тегам