如何使jtextarea可滚动?

wkftcu5l  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(381)

我一直想补充 JScrollBar 变成一个 JTextArea ,但当我测试它时,滚动条不会出现。另外,我想最大化文本区域,但它不会变得更大,即使我改变大小值。这是我的密码:

class EFrame extends JFrame implements ActionListener {
    JLabel jl1, jl2, jl3, jl5;
    JTextArea jta;
    JPanel jpBase, jpTop, jpm, jpmm, jpmb, jpBottom, jpBBT;
    JTextField jtf1, jtf2, jtf3, jtf4, jtf5;
    JScrollBar jBar;
    JScrollPane jsp;

    EFrame() {
        setTitle("GUI");
        setSize(1000, 1000);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setMinimumSize(new Dimension(100, 100));
        this.setMaximumSize(new Dimension(1920, 1080));

        jsp = new JScrollPane(jta, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

        jpBase = new JPanel();
        jpTop = new JPanel();
        jpm = new JPanel();
        jpmm = new JPanel();
        jpmb = new JPanel();
        jpBottom = new JPanel();
        jpBBT = new JPanel();

        jtf1 = new JTextField(10);
        jtf2 = new JTextField(10);
        jtf3 = new JTextField(10);
        jtf5 = new JTextField(10);

        add(jpBase);
        jpBase.setLayout(new GridLayout(8, 1));
        jpBase.setSize(1000, 1000);
        jpBase.add(jpTop);
        jpBase.add(jpm);
        jpBase.add(jpmm);
        jpBase.add(jpmb);
        jpBase.add(jpBottom);
        jpBase.add(jpBBT);

        jpTop.setLayout(new GridLayout(1, 0));

        jpm.setLayout(new GridLayout(1, 0));
        jpmm.setLayout(new GridLayout(1, 0));
        jpBottom.setLayout(new GridLayout(1, 0));
        jpBBT.setSize(1000, 1000);
        jpBBT.add(jta);
        jta.setSize(1000, 1000);
        jta.add(jsp);
        this.setVisible(true);
    }
    // ...
}

我做错什么了?

bpsygsoo

bpsygsoo1#

JTextArea jta;

该代码不会创建文本区域的示例。它只定义一个空的引用。
您的代码应该类似于:

JTextArea jta = new JTextArea(10, 40);

上面的代码将创建一个包含10行40列的文本区域。
然后使用文本区域(正确)创建滚动窗格:

jsp = new JScrollPane(jta, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

注意:您只需要:

jsp = new JScrollPane(jta);

默认行为是仅在需要时显示滚动条。
然后你要:

jpBBT.add(jta);

组件只能有一个父级。因此,第二条语句是从滚动窗格中删除文本区域。
代码应为:

//jpBBT.add(jta);
jpBBT.add(jsp);

现在你需要摆脱:

//jta.setSize(1000, 1000);
    //jta.add(jsp)

设置大小不起任何作用。使用行/列是指定大小的正确方法。
将滚动窗格添加到文本区域是没有意义的。您已经将文本区域添加到滚动窗格中。你不能两者兼得。
阅读swing教程中有关如何使用文本区域的部分,了解更多信息和工作代码。下载工作代码并将其作为类的起点,这样您的代码结构就更好了。
另外,使用描述性变量名使代码更易于阅读、理解和维护。

相关问题