设置JTextArea的固定宽度,而高度应自动调整为其内容

时间:2012-06-13 15:58:47

标签: java swing jtextarea

当我运行下面的示例代码时,JTextArea的宽度是固定的(100px),而其高度是动态调整的,因为我在其中键入了一些文本。

例如,我从这开始:

--------------------
| some text        |
--------------------

当我输入更多文本时,JTextArea的高度会扩展,以便在保留宽度的同时适合内容:

--------------------
| some text, some  |
| other longer text|
| etc...           |
--------------------

如何加倍JTextArea的宽度? 当我通过改变preferredSize来做到这一点时,高度不再是动态的。

public class TestTextArea extends JFrame {

    public static void main(String[] args) {
        new TestTextArea().setVisible(true);
    }

    public TestTextArea() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(0,0,800,600);
        setContentPane(createPane());
    }

    protected Container createPane() {
        JTextArea textArea = createTextArea();

        // ------------------------------------------
        // UNCOMMENT TO DOUBLE THE WIDTH OF JTextArea

//        Dimension oldPrefSize = textArea.getPreferredSize();
//        Dimension newPrefSize = new Dimension(oldPrefSize.width * 2, oldPrefSize.height);
//        textArea.setPreferredSize(newPrefSize);

        JPanel pane = new JPanel(new FlowLayout());
        pane.add(textArea);
        return pane;
    }

    protected JTextArea createTextArea() {
        JTextArea textArea = new JTextArea();
        textArea.setWrapStyleWord(true);
        textArea.setLineWrap(true);
        return textArea;
    }

}

3 个答案:

答案 0 :(得分:5)

使用JTextArea#setColumns方法调整宽度

答案 1 :(得分:1)

将linewrap设置为true => textArea.setLineWrap(真); 这将使最大线宽= textarea与

答案 2 :(得分:0)

更改此行代码textArea.setPreferredSize(newPrefSize);至       textArea.setSize(newPrefSize); 高度将动态调整。