【问题标题】:How do I make JTextArea scrollable?如何使 JTextArea 可滚动?
【发布时间】:2020-11-29 03:59:26
【问题描述】:

我一直在尝试将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
  • JTextArea 在底部
  • JTextArea 位于底部 - 设置文本区域的大小不会创建文本区域的实例。您的代码不应执行。你应该得到一个 NullPointerException。

标签: java swing jscrollpane jtextarea


【解决方案1】:
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)
  1. 设置大小不起作用。使用行/列是指定大小的正确方法。
  2. 将滚动窗格添加到文本区域是没有意义的。您已经将文本区域添加到滚动窗格。你不能两者都做。

阅读 How to use Text Areas 上的 Swing 教程部分,了解更多信息和工作代码。下载工作代码并将其用作您上课的起点,以便您的代码结构更好。

此外,使用描述性的变量名称使您的代码更易于阅读、理解和维护。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-07
  • 2012-06-26
  • 1970-01-01
相关资源
最近更新 更多