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

时间:2015-11-10 01:34:42

标签: java swing jframe jpanel

我正在尝试创建模块化MVC swing应用。所以我有一个运行代码的Main类,一个代表窗口的Frame类(扩展JFrame),并且在其中有一个类(扩展{{1} })有我的GUI元素。我的目标是在View需要更改时能够轻松更新/重新绘制JPanel类。

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

所以这是我的主要课程:

Panel

这是JFrame类

package mvc;

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

这里是JPanel

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

1 个答案:

答案 0 :(得分:3)

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

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