如何将jTextArea设置为具有与其包含的文本大小相匹配的高度(以避免滚动条)

时间:2010-06-20 22:39:50

标签: java swing jscrollpane jtextarea jscrollbar

这个问题看起来微不足道,但我找不到解决方案。

创建表单时,它包含JTextArea。我想在其中放入大的常量文本。如果文本长1000行,我希望我的JTextArea高1000行(足够大以显示没有滚动条的整个文本)。 JTextArea位于一个可以有滚动条的面板中,因此当它变得太大时就不会有问题(该面板中有两个JTextArea ...就像在diff工具中一样。有谁知道我怎么能做到这一点?感谢。

4 个答案:

答案 0 :(得分:5)

BorderLayout只需将JTextArea放在JScrollPane中,然后再将JPanel添加到FlowLayout中,即可开箱即用。另一方面,setPreferedSize()没有。它不会显示滚动条,除非@Xorty暗示,您在JScrollPane上调用{{1}}并为其提供您想要的维度。

答案 1 :(得分:4)

你也可以使用这样的东西(有限的宽度,高度取决于文字,在显示信息时很有用):

  public JTextArea createTextAreaFitToText(String message, Dimension minimalSize){

        JTextArea aMessagePanel = new JTextArea();
        aMessagePanel.setText(message);

        /*for modelToView to work, the text area has to be sized. It doesn't matter if it's visible or not.*/
        aMessagePanel.setPreferredSize(minimalSize);
        aMessagePanel.setSize(minimalSize);            

        Rectangle r = aMessagePanel.modelToView(aMessagePanel.getDocument().getLength()); 

        Dimension d = new Dimension(minimalSize.width, r.y + r.height);
        aMessagePanel.setPreferredSize(d);
        return aMessagePanel;

}

答案 2 :(得分:1)

增加或减少JTextArea的高度。输入文本后,调用JTextArea的getPreferredSize() - 它将为您提供显示整个文本所需的大小。 之后使用JScrollPane的setPrefferedSize()来设置JTextArea的大小

答案 3 :(得分:0)

嗯,首先:它是JTextArea而不是jTextArea。

现在 - 将JTextArea放入JScrollPane。输入文本后,调用JScrollPane的getPreferedSize() - 它将为您提供显示整个文本所需的精确大小。另外,我从不使用其他LayoutManager而不是NetBeans Swing构建器中的“Free Design” - 所以我不确定其他LayoutManagers在那里的行为。