使用JPanel初始化JFrame的正确方法

时间:2014-01-24 22:51:47

标签: java swing jframe jpanel

我在Java中学习游戏开发。以下是我学习初始化附加到JFrame的JPanel的两种方法。两者之间有什么区别,哪一个更正确?

请注意,在方法1 中,Skeleton不会扩展JFrame。在方法2 中,确实如此。

方法1:

Board.java

public class Board extends JPanel {
    public Board() {
        setPreferredSize(new Dimension(300, 280));
    }
}

Skeleton.java

public class Skeleton {
    public static void main(String[] args) {
        JFrame window = new JFrame("Skeleton");
        window.setContentPane(new Board());
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.pack();
        window.setVisible(true);
    }
}

方法2:

Board.java

public class Board extends JPanel {
    public Board() {}
}

Skeleton.java

public class Skeleton extends JFrame {
    public Skeleton() {
        add(new Board());
        setTitle("Skeleton");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(300, 280);
        setLocationRelativeTo(null);
        setVisible(true);
        setResizable(false);
    }

    public static void main(String[] args) {
        new Skeleton();
    }
}

2 个答案:

答案 0 :(得分:3)

基本上,如果你想让你的骨架类只是一个JFrame,你可以很好地扩展它。如果您希望它具有其他功能,您将希望该类包含JFrame对象,就像在'方法1'中一样。两种方法的工作方式相同(就JFrame对象而言),但这是您想要在应用程序中执行的操作。扩展JFrame将限制您可以执行的操作(即调用某些方法),但如果它仅作为JFrame运行,则无论如何都无关紧要。

答案 1 :(得分:2)

您应该搜索继承。当A类扩展B类时,A类是B类。

例如,如果我上汽车,然后上宝马级,那么宝马延伸级轿车是合乎逻辑的,因为宝马是一辆汽车。宝马继承了上车的所有方法,因为从逻辑上讲,宝马可以做标准车可以做的事情。然而,宝马可能能够制造额外的东西,这就是为什么你可以超越方法并在宝马级别宝马可以使用的类别中编写新方法(以及任何类别继承宝马)。 方法重写是从子类(类BMW)中的超类(类Car)重写方法,子方法的标题应该与super方法的标题完全相同,但方法可以做不同的事情。 在第一个类中,Skeleton不是JFrame,而在第二个Skeleton中是一个JFrame。