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

时间:2013-05-01 22:57:16

标签: 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.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();
    }
}

但没有任何东西正在添加到框架中,而我正在获得一个空窗口。我做错了什么?

2 个答案:

答案 0 :(得分:4)

由于您的类已经扩展了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);
    }
}

我也同意Reimeus的评论。没有必要扩展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 );

答案 1 :(得分:2)

您需要将panel添加到TopPanel

中的容器中
add(panel);

由于您目前尚未向JPanel添加任何新功能,因此您只需使用JPanel的直接实例而不是子类。调用panel.setVisible(true)是不必要的。当顶层窗口可见时,Swing将使所需组件可见。