Как установить максимально необходимый размер JTextArea

У меня есть нередактируемый файл JTextArea. Я хочу, чтобы размер этого JTextArea был не больше, чем необходимо, чтобы содержать текст, который у него есть. Однако, если я расширим компонент, содержащий его, JTextArea также расширится, оставив раздражающее пустое пространство. Я не помещаю его в JScrollPane (в данном случае я не могу использовать JScrollPane). Контейнер с JTextArea использует BoxLayout.

Итак, в основном, у меня есть это:

_____________________________
|adfadfvfvanalfvnavlavnaklvf|
|afdviadanklfvnaflanvlakdnfv|
|efvavsavasv                |
|                           |
|___________________________|

И я хочу это:

_____________________________
|adfadfvfvanalfvnavlavnaklvf|
|afdviadanklfvnaflanvlakdnfv|
|efvavsavasv________________|

СООТВЕТСТВУЮЩИЙ КОД:

private void initializeAllComponents(){
    this.setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));

    this.setHeader();
    this.add(header);

    this.setDescription();//This is the JTextArea
    this.add(desc);

    this.setBody();
    this.add(body);

    this.setFooters();
}

private void setDescription(){
    desc = new JTextArea(skill.getDesc());
    desc.setFont(new Font("URW Chancery L", Font.ITALIC, 16));
    desc.setBackground(new Color(218, 217, 199));
    desc.setEditable(false);
    desc.setLineWrap(true);
    desc.setWrapStyleWord(true);
}

person MirroredFate    schedule 14.07.2011    source источник
comment
Можете ли вы включить соответствующий код? Кроме того, вы, вероятно, захотите поместить JTextArea в JPanel, а затем добавить этот JPanel в контейнер, чтобы изменить размер JPanel вместо JTextArea.   -  person mre    schedule 14.07.2011
comment
@MirrorredFate, я предполагаю, что this - это JFrame?   -  person mre    schedule 14.07.2011


Ответы (2)


Вы можете просто поместить JTextArea в северную часть BorderLayout, например.

contentPane.setLayout(new BorderLayout());
contentPane.add(textArea, BorderLayout.NORTH);

Тогда он будет использовать ровно столько места, сколько необходимо.

Примечание. Если вам нужен перенос строк, не забудьте textArea.setLineWrap(true);.

person Howard    schedule 14.07.2011
comment
Да, это работает. Думаю, я просто добавлю все в JPanels, используя макет северной границы... Должен сказать, я надеюсь, что JVM действительно все оптимизирует, потому что я использую компоненты, вложенные в восьмеричном порядке. - person MirroredFate; 14.07.2011

я хотел бы использовать

desc.setMaximumSize(getPreferredSize());

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

person Sjogzor    schedule 17.01.2012