通过方法构建时 JTextArea 未出现在 JScrollPane 上

JTextArea not appearing on JScrollPane when building through methods

我正在尝试制作一个 class,我可以在其中通过调用不同的方法在其上构建 JFrame 来创建它。然而,我的 JTextArea 在某处丢失了......

下面是一个名为 class 的应用程序,其中包含我需要开始构建的方法...

public class App {
    private JFrame frame = new JFrame();
    private JTextArea textArea = new JTextArea();
    private JScrollPane scrollPane = new JScrollPane();

    public void openJFrame(String title, int x, int y){
        JFrame.setDefaultLookAndFeelDecorated(true);
        frame.setTitle(title);
        frame.setSize(x, y);
        frame.setResizable(false);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public JFrame getJFrame(){
        return frame;
    }
    public void addJTextArea(JScrollPane scrollPane){
        scrollPane.add(textArea);
        textArea.setLineWrap(true);
        textArea.setEditable(true);
        textArea.setVisible(true);
    }
    public JTextArea getJTextArea(){
        return textArea;
    }
    public void addJScrollPane(JFrame frame){
        frame.add(scrollPane);
        scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

    }
    public JScrollPane getJScrollPane(){
        return scrollPane;
    }

我想从我的主要方法中调用这个 class 并构建一个 JFrame。以下是我的尝试。

public class Main {
    public static void main(String[] args){
        App app = new App();

        app.addJTextArea(app.getJScrollPane());
        app.addJScrollPane(app.getJFrame());
        app.openJFrame("title", 500, 500);
    }

出现的是 JFrame 和 ScrollPane。但是我的文本区域似乎没有添加到滚动窗格中。

我是不是误解或忽略了什么?可能值得注意的是,如果在 addJTextArea 方法中我直接将它添加到 JFrame 上而不使用它出现的 JScrollPane 方法(显然没有滚动窗格)

尽管 JScrollPane 可能 look/act/sound 类似于 JPanel,但事实并非如此。因此,使用 JScrollPane.add() 将组件添加到滚动窗格可能听起来很自然,但却是错误的。 JScrollPane 内部只能有一个滚动的组件,因此 add() 是错误的,但是 setViewportView() 是要使用的方法。

您必须调整您的方法 addJTextArea 以使用 scrollPane.setViewportView() 而不是 scrollPane.add():

public void addJTextArea(JScrollPane scrollPane){
    scrollPane.setViewportView(textArea);
    textArea.setLineWrap(true);
    textArea.setEditable(true);
    textArea.setVisible(true);
}

scrollPane.add(textArea); 替换为 scrollPane.setViewportView(textArea);

有关详细信息,请阅读 How to Use Scroll Panes