6

所以,我在 JPanel (BoxLayout) 上有 JTextArea。我还有填充 JPanel 其余部分的 Box 填充器。我需要我的 JTextArea 从单行高度开始(我可以管理它),并在需要时扩展和减少。

自动换行已启用,我只需要在添加/删除新行时调整它的高度。

我尝试使用 documentListener 和 getLineCount(),但它无法识别 wordwrap-newlines。

如果可能的话,我想避免弄乱字体。

而且,没有滚动窗格。JTextArea 必须始终完全显示。

4

1 回答 1

13

JTextArea有一个比较特殊的副作用,在合适的条件下,它可以自行生长。当我试图设置一个简单的两行文本编辑器(每行字符长度受限,最多两行)时,我偶然发现了这个......

基本上,给定正确的布局管理器,这个组件可以自行增长——这实际上是有道理的,但让我感到惊讶......

我这么小看着我长大

现在此外,您可能希望使用 aComponentListener来监视组件何时更改大小,如果您对此感兴趣...

public class TestTextArea extends JFrame {

    public TestTextArea() {

        setLayout(new GridBagLayout());

        JTextArea textArea = new JTextArea();
        textArea.setColumns(10);
        textArea.setRows(1);
        textArea.setLineWrap(true);
        textArea.setWrapStyleWord(true);

        add(textArea);

        setSize(200, 200);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);

        textArea.addComponentListener(new ComponentAdapter() {

            @Override
            public void componentResized(ComponentEvent ce) {

                System.out.println("I've changed size");

            }

        });

    }


    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        new TestTextArea();
    }

}
于 2012-08-18T20:48:43.137 回答