Java 向JTextArea添加垂直滚动条

Java 向JTextArea添加垂直滚动条,java,swing,user-interface,jtextarea,Java,Swing,User Interface,Jtextarea,我正在制作一个简单的GUI,它有一个JTextArea,我可以在其中粘贴字符串。当字符串变得太长时,JTextArea将被填满,我可以看到单词低于我为文本区域设置的边界。我想在此文本区域添加一个垂直滚动条 public class GUI implements ActionListener { private static JTextArea fileContents; public static void main(String[] args) { JFrame

我正在制作一个简单的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);
您有两个问题:

  • 如果将
    fileContents
    添加到添加到
    panel
    sp
    ,则无需将
    fileContents
    添加到
    panel
  • 使用
    JScrollPane
    时,应仅使用constractor
    JScrollPane(组件视图)
    而不使用
    add()
    方法添加
    组件

  • 为什么要将文本区域同时添加到面板和滚动窗格?1)Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作,在不同的地区使用不同的PLAF。因此,它们不利于像素完美布局。而是使用布局管理器,或与布局填充和边框一起使用。请注意,不使用布局管理器通常会停止滚动窗格的功能。2) 为了更快地获得更好的帮助,请添加一个或。。。。3) 看。如果您了解堆栈跟踪的工作原理,您就会意识到末尾的数字表示源代码中的行号。代码片段会更改行号,这意味着我们无法充分利用它们。4) @daniu说得很对。不要将组件单独添加到滚动窗格和GUI中。任何GUI组件/容器只能有一个父级。它应该是滚动窗格。另外,不要将内容添加到滚动窗格中,而是添加到其视口中。请参阅:。
    TextDemo
    是一个使用JTextField和JTextArea的工作示例。您得到的是
    IllegalArgumentException
    ,因为以下代码行与您认为的不同:
    sp.add(fileContents,JScrollPane.VERTICAL\u SCROLLBAR\u ALWAYS)引用类
    java.awt.Container中的方法
    您还可以在
    JScrollPane
    构造函数中提供
    垂直滚动条
    策略。像这样
    JScrollPane sp=newjscrollpane(fileContents,JScrollPane.VERTICAL\u SCROLLBAR\u总是,JScrollPane.HORIZONTAL\u SCROLLBAR\u根据需要)