知道为什么我的代码没有连接到框架?
框:
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天前教我们这个,我不能再困惑了。试图多次得到这方面的帮助,即使是教授,也没有用,有人请帮助我解释。提前谢谢。
答案 0 :(得分:1)
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对象,您将导致几乎无限的递归:
相反,不要这样做:
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变量足够接近我们的名字,更重要的是混淆了你未来的自我。您将需要使用更多逻辑和不同的变量名称。