繁体   English   中英

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

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

我正在尝试创建一个模块化的MVC swing应用。 因此,我有一个运行代码的Main类,一个代表窗口的Frame类(扩展了JFrame ),并且其中包含一个包含我的GUI元素的类(扩展了JPanel )。 我的目标是在需要更改视图时能够轻松更新/重绘Panel类。

但是,由于我的代码是正确的,因此它运行时没有错误,并且打开了一个空的Frame,但是JPanel类中的元素无法显示,我也不知道为什么。 -我知道,很可能是菜鸟的错误,但是我再也看不到它了。

所以这是我的主要课程:

package mvc;

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

这是JFrame类

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,请查看初始线程以了解更多详细信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM