Swing JTextArea:在自动换行后正确调整对话框大小

时间:2014-10-30 10:48:31

标签: java swing jtextarea word-wrap

我希望我没有错过一些重复的问题,我觉得这应该是微不足道的!

无论如何,我有一个带有文字的JTextArea,带有自动换行符:

public PleaseResize(){
    super();
    Container cp = this.getContentPane();

    JTextArea area = new JTextArea();
    area.setColumns(20);
    area.setLineWrap(true);
    area.setEditable(false);
    area.setWrapStyleWord(true);
    area.setText("Once upon a midnight dreary, while I pondered, weak and weary, over many a quaint an curious volume of forgotten lore.");
    cp.add(area, BorderLayout.CENTER);

    cp.add(new JButton("Hallo"), BorderLayout.SOUTH);
    this.pack();
}

我希望文本区域垂直调整大小以显示整个文本...但它不会。如果我通过推入\n选择换行符,它会很快乐地调整大小,但是使用自动换行,它仍然是它的大小。

我觉得我错过了一些非常明显的东西......

修改以澄清:

在创建时,我不知道文本将有多少行(由于自动换行发生)。我通过XML文件接收Text,并且在换行后它可以在0到30行之间变化。我有垂直空间来显示所有内容,但是当没有或只显示一些文本时,我不想滚动或有一个巨大的白色区域。


编辑2:

在重新提问之后,他们面临的问题的关键显然是没有调整JTextArea的大小,但确保对话框知道它有多大!

所以,这里是我最终使用的解决方案的链接:An automatic resizing Text above a button?

1 个答案:

答案 0 :(得分:2)

您需要将JTeatAreaJScrollPane一起包裹,如下一个new JScrollPane(area);,然后将JScrollPane添加到JFrame

您还使用空构造函数创建JTextArea,使用JTextArea(int rows, int cols)指定行数和列数。