Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使JTextArea可滚动?_Java_Swing_Jscrollpane_Jtextarea - Fatal编程技术网

Java 如何使JTextArea可滚动?

Java 如何使JTextArea可滚动?,java,swing,jscrollpane,jtextarea,Java,Swing,Jscrollpane,Jtextarea,我一直在尝试将JScrollBar添加到JTextArea中,但是当我测试它时,滚动条没有显示出来。此外,我希望最大化文本区域,但即使更改大小值,文本区域也不会变大。这是我的密码: class EFrame extends JFrame implements ActionListener { JLabel jl1, jl2, jl3, jl5; JTextArea jta; JPanel jpBase, jpTop, jpm, jpmm, jpmb, jpBottom,

我一直在尝试将
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);
    }
    // ...
}
我做错了什么

JTextArea jta;
该代码不会创建文本区域的实例。它只定义一个空的引用

您的代码应该类似于:

JTextArea jta = new JTextArea(10, 40);
上面的代码将创建一个包含10行40列的文本区域

然后使用文本区域(正确)创建滚动窗格:

注意:您只需要:

jsp = new JScrollPane(jta);
默认行为是仅在需要时显示滚动条

然后你会:

 jpBBT.add(jta);
组件只能有一个父级。因此,第二条语句是从滚动窗格中删除文本区域

代码应为:

//jpBBT.add(jta);
jpBBT.add(jsp);
现在你需要摆脱:

    //jta.setSize(1000, 1000);
    //jta.add(jsp)
  • 设置大小没有任何作用。使用行/列是指定大小的正确方法
  • 将滚动窗格添加到文本区域没有意义。您已经将文本区域添加到滚动窗格中。你不能两者都做
  • 有关更多信息和工作代码,请阅读上Swing教程的部分。下载工作代码,并将其用作类的起点,以便更好地构造代码


    另外,使用描述性变量名可以使代码更易于阅读、理解和维护。

    好吧,一开始你就不会在JTextArea位于底部的任何地方构建JTextArea,JTextArea位于底部-设置文本区域的大小不会创建文本区域的实例。您的代码不应执行。你应该得到一个NullPointerException。很高兴它有帮助。不要忘记通过点击复选标记(答案旁边)来“接受”答案,这样人们就知道问题已经解决了。请参阅:。
        //jta.setSize(1000, 1000);
        //jta.add(jsp)