知道为什么我的代码没有连接到框架吗?
帧:
import javax.swing.*;
import java.awt.*;
public class CourseGUI extends JFrame {
public CourseGUI()
{
super("CourseGUI Frame");
JPanel topPane = new TopPanel();
JPanel topPanel = new JPanel();
topPanel.setBackground(java.awt.Color.WHITE);
Dimension d = new Dimension(800,600);
topPanel.setPreferredSize(d);
this.setLayout(new BorderLayout());
this.add(topPanel, BorderLayout.NORTH);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(800,600);
this.setVisible(true);
}
public static void main(String[] args)
{
new CourseGUI();
}
}
面板:
import javax.swing.*;
import java.awt.*;
public class TopPanel extends JPanel {
public TopPanel() {
TopPanel tp = new TopPanel();
tp.add(new JLabel("Course Info"));
tp.setSize(300,300);
tp.setVisible(true);
}
}
有了这个面板,我试着把它放在框架的北部,遗憾的是,它不起作用。我是一个初学者程序员,今年在学校里真正学会了这个,我们的老师4天前教过我们这个,我不能再困惑了。我试过几次寻求帮助,甚至是从教授那里,但都无济于事,请有人帮我解释一下。提前谢谢。
public class TopPanel extends JPanel {
public TopPanel() {
TopPanel tp = new TopPanel();
tp.add(new JLabel("Course Info"));
tp.setSize(300,300);
tp.setVisible(true);
}
}
通过在自己的构造函数中创建TopPanel对象,您将导致近乎无限的递归:
- TopPanel构造函数将创建一个新的TopPanel对象
- 其构造函数将创建一个新的TopPanel对象
- 其构造函数将创建一个新的TopPanel对象
- 其构造函数将创建一个新的TopPanel对象,其构造函数,。。。。
- 。。。etc-递归,直到内存耗尽。不要这样做
- 其构造函数将创建一个新的TopPanel对象,其构造函数,。。。。
- 其构造函数将创建一个新的TopPanel对象
- 其构造函数将创建一个新的TopPanel对象
相反,不要这样做:
public class TopPanel extends JPanel {
public TopPanel() {
// get rid of the recursion
// TopPanel tp = new TopPanel();
// add the label to the current TopPanel object, the "this"
add(new JLabel("Course Info"));
// setSize(300,300); // generally not a good idea
// tp.setVisible(true); // not needed
}
// this is an overly simplified method. You may wish to calculate what the
// preferred size should be, or simply don't set it and let the components
// size themselves.
public Dimension getPreferredSize() {
return new Dimension(300, 300);
}
}
编辑
此外,虽然没有错误,但这:
JPanel topPane = new TopPanel();
JPanel topPanel = new JPanel();
非常令人困惑,因为这两个JPanel变量在名称上非常接近,足以混淆我们,更重要的是混淆你未来的自己。您将希望使用更符合逻辑且不同的变量名。