无法在 JPanel 上扩展 class 以在 JFrame class 中显示

Can't get a class extended on JPanel to show within a JFrame class

我正在尝试创建一个模块化的 MVC swing 应用程序。所以我有一个运行代码的 Main class,一个代表 window 的 Frame class(扩展 JFrame),并在其中有一个包含我的 GUI 元素的 class(扩展 JPanel)。我的目标是当View需要改变的时候能够轻松地update/repaint Panel class。

但是,正如我现在的代码一样,它运行时没有错误,它打开了一个空框架,但是 JPanel class 中的元素不会显示,我不知道为什么。 - 很可能是一个菜鸟错误,我知道,但我再也看不到了。

所以这是我的主要内容 class:

package mvc;

public class Main {
    public static void main(String[] args)
    {
        new Frame();
    }
}

这是 JFrame class

package mvc;

import java.awt.Container;

import javax.swing.JFrame;

public class Frame extends JFrame{
    private static int width = 500;
    private static int height  = 500;

    public Frame(){

        setResizable(false);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        Container pane = getContentPane();
        Panel game  = new Panel();      
        pane.add(game);     
        pack();

        setSize(width, height);
        setLocation(100,100);
        setVisible(true);
    }
}

这是 JPanel

package mvc;

import java.awt.Container;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Panel extends JPanel {
    private JButton b1;
    private JLabel l1;

    public Panel(){
        Container pane = new JPanel();
        b1 = new JButton("Button");
        pane.add(b1);
        l1 = new JLabel("Label for the button");
        pane.add(l1);
    }   
}

我不确定你为什么要这样做...

public Panel(){
    Container pane = new JPanel();
    b1 = new JButton("Button");
    pane.add(b1);
    l1 = new JLabel("Label for the button");
    pane.add(l1);
}  

但是您没有向任何内容添加 pane,因此屏幕上没有显示任何内容

只做一些事情会更容易...

public Panel(){
    b1 = new JButton("Button");
    add(b1);
    l1 = new JLabel("Label for the button");
    add(l1);
}  

您还应该仅在事件调度线程的上下文中创建和修改您的 UI,请查看 Initial Threads 了解更多详细信息