向 JTextArea 添加垂直滚动条

Adding a vertical scroll bar to a 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);

您有 2 个问题:

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