向 JTextArea 添加垂直滚动条

问题描述

我正在制作一个简单的 GUI,它有一个 JTextArea,我可以在其中粘贴一个字符串。当字符串太长时,JTextArea 会填满,我可以看到文字低于我为文本区域设置的边界。我想在这个文本区域添加一个垂直滚动条。

public class GUI implements ActionListener {
    private static JTextArea fileContents;
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();

        frame.setSize(700,500);
        frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(panel);

        panel.setLayout(null);

        fileContents = new JTextArea();
        fileContents.setBounds(175,75,275,275);
        panel.add(fileContents);
        JScrollPane sp = new JScrollPane();
        sp.add(fileContents,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        panel.add(sp);

我在进行此设置时遇到错误

Exception in thread "main" java.lang.IllegalArgumentException: illegal component position
    at java.desktop/java.awt.Container.addImpl(Container.java:1111)
    at java.desktop/java.awt.Container.add(Container.java:489)
    at harness.GUI.main(HarnessGUI.java:60)

解决方法

此代码有效:

        JFrame frame = new JFrame();
        JPanel panel = new JPanel();

        frame.setSize(700,500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(panel);
        frame.setVisible(true);
        panel.setLayout(null);

        fileContents = new JTextArea();
        JScrollPane sp = new JScrollPane(fileContents);
        sp.setBounds(175,75,300,300);
        panel.add(sp);

您有两个问题:

  1. 如果将 fileContents 添加到添加到 sppanel,您不需要将 fileContents 添加到 panel
  2. 使用 JScrollPane 时,您应该仅使用构造函数 Component 而不是 JScrollPane(Component view) 方法添加 add()