Java 将类中的JPanel添加到主类中的JFrame

Java 将类中的JPanel添加到主类中的JFrame,java,swing,user-interface,awt,Java,Swing,User Interface,Awt,我正在尝试添加此面板: import javax.swing.*; import java.awt.*; class TopPanel extends JPanel{ public TopPanel() { JPanel panel = new JPanel(); JLabel label = new JLabel("Course Lookup GUI"); panel.add(label); panel.setVisib

我正在尝试添加此面板:

import javax.swing.*;
import java.awt.*;

class TopPanel extends JPanel{
    public TopPanel() {
        JPanel panel = new JPanel();
        JLabel label = new JLabel("Course Lookup GUI");
        panel.add(label);
        panel.setVisible(true);
    }
}
对于这样的框架:

import javax.swing.*;
import java.awt.*;

class CourseGUI extends JFrame{
    public CourseGUI() {
        this.setLayout(new FlowLayout());
        this.setLocation(200,200);

        TopPanel    tPan = new TopPanel();
        MiddlePanel mPan = new MiddlePanel();

        this.add(tPan);
        this.add(mPan);

        this.setVisible(true);
    }

    public static void main(String[] args){
        CourseGUI cGUI = new CourseGUI();
    }
}

但是没有任何东西增加到框架中,我得到了一个空窗口。我做错了什么?

您需要将
面板添加到
TopPanel
中的容器中

add(panel);

由于您当前没有向
JPanel
添加任何新功能,您可以简单地使用
JPanel
的直接实例,而不是子分类。不需要调用
panel.setVisible(true)
。当顶层窗口可见时,Swing将使所需组件可见。

您需要将
面板添加到
TopPanel
中的容器中

add(panel);

由于您当前没有向
JPanel
添加任何新功能,您可以简单地使用
JPanel
的直接实例,而不是子分类。不需要调用
panel.setVisible(true)
。当顶层窗口可见时,Swing将使所需的组件可见。

因为您的类已经扩展了JPanel,所以不需要创建另一个面板。只需将标签添加到类本身

class TopPanel extends JPanel{
    public TopPanel() {
        //JPanel panel = new JPanel();
        JLabel label = new JLabel("Course Lookup GUI");
        add( label );
        //panel.add(label);
        //panel.setVisible(true);
    }
}
我也同意雷默斯的评论。没有必要扩展JPanel来实现此功能。只要做:

JPanel tPan = new JPanel;
JLabel label = new JLabel("Course Lookup GUI");
tPan.add(label);
this.add( tPan );
JLabel label = new JLabel("Course Lookup GUI");
this.add( label );
或者更简单,因为您只是将一个组件添加到面板中,所以甚至不需要创建面板。只要做:

JPanel tPan = new JPanel;
JLabel label = new JLabel("Course Lookup GUI");
tPan.add(label);
this.add( tPan );
JLabel label = new JLabel("Course Lookup GUI");
this.add( label );

因为您的类已经扩展了JPanel,所以不需要创建另一个面板。只需将标签添加到类本身

class TopPanel extends JPanel{
    public TopPanel() {
        //JPanel panel = new JPanel();
        JLabel label = new JLabel("Course Lookup GUI");
        add( label );
        //panel.add(label);
        //panel.setVisible(true);
    }
}
我也同意雷默斯的评论。没有必要扩展JPanel来实现此功能。只要做:

JPanel tPan = new JPanel;
JLabel label = new JLabel("Course Lookup GUI");
tPan.add(label);
this.add( tPan );
JLabel label = new JLabel("Course Lookup GUI");
this.add( label );
或者更简单,因为您只是将一个组件添加到面板中,所以甚至不需要创建面板。只要做:

JPanel tPan = new JPanel;
JLabel label = new JLabel("Course Lookup GUI");
tPan.add(label);
this.add( tPan );
JLabel label = new JLabel("Course Lookup GUI");
this.add( label );