如何设置JTextArea的最大必要大小

时间:2011-07-14 16:25:20

标签: java swing 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);
}

2 个答案:

答案 0 :(得分:1)

您可以将JTextArea放在BorderLayout的北部,例如

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

然后它将根据需要使用尽可能多的空间。

注意:如果您需要换行,请不要忘记textArea.setLineWrap(true);

答案 1 :(得分:-2)

我会用

desc.setMaximumSize(getPreferredSize());

最小化desc的大小,因为JTextArea的首选大小由行数和列数定义。