GUI代码中存在StackOverflow错误



知道为什么我的代码没有连接到框架吗?

帧:

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-递归,直到内存耗尽。不要这样做

相反,不要这样做:

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变量在名称上非常接近,足以混淆我们,更重要的是混淆你未来的自己。您将希望使用更符合逻辑且不同的变量名。

相关内容

  • 没有找到相关文章

最新更新