扩展JPanel或返回JPanel

时间:2017-11-10 15:14:35

标签: java user-interface 2d-games

我目前正在尝试重新创建Breakout,并且想知道如何实现基本的gui。我的结构是一个包含JPanel的JFrame,JPanel实际上是游戏的元素。 JFrame通过将其添加到其内容窗格[frame.getContentPane()。add(myPanel)]来获取此JPanel。

我的问题是,持有游戏元素的班级是应该扩展JPanel还是只返回JPanel?

public class myPanel {
    private JPanel panel;
    public myPanel() {
        panel = new JPanel();
        //do stuff with the panel
    }

    public JPanel getPanel() {
        return panel;
    }
}

public class myPanel extends JPanel{
    public myPanel() {
        panel = new JPanel();
        //do stuff with the panel
    }
}

1 个答案:

答案 0 :(得分:0)

我相信在大多数情况下你应该明确使用扩展。
这也是错误的:

public class myPanel extends JPanel{
    public myPanel() {
        panel = new JPanel();
        //do stuff with the panel
    }
}

应该是这样的:

public static void main(String[] args){
    JFrame frame=new JFrame();
    myPanel panel=new myPanel("hello");
    frame.add(panel);
    System.out.println(panel.getHello());
}

public class myPanel extends JPanel{
    String hello;
    //stuff you need in the panel
    public myPanel(String hello) {
        this.hello=hello;
    }
    public String getHello(){
        return hello;
    }
}

你应该这样做的一个原因是很容易@override thepaint(),并处理它里面的JPanel所需的东西。
如果您想让事情保持简单并且不需要覆盖任何您可能不需要扩展的东西,但我不会考虑创建一个类来保留 JPanel 一个选项。