首页 > 解决方案 > 向 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)

标签: javaswinguser-interfacejtextarea

解决方案


此代码有效:

        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添加到sp添加到panel,则不需要添加fileContentspanel
  2. 使用s 时JScrollPane,您应该Component只在构造函数中添加 s,JScrollPane(Component view)而不是在add()方法中添加 s。

推荐阅读