1

我正在尝试添加此面板:

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();
    }
}

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

4

2 回答 2

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 );
于 2013-05-01T23:52:49.327 回答
2

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

add(panel);

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

于 2013-05-01T23:02:47.143 回答