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

use*_*880 5 java swing jpanel jframe

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

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

方法1:

Board.java

public class Board extends JPanel {
    public Board() {
        setPreferredSize(new Dimension(300, 280));
    }
}
Run Code Online (Sandbox Code Playgroud)

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

方法2:

Board.java

public class Board extends JPanel {
    public Board() {}
}
Run Code Online (Sandbox Code Playgroud)

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

Arm*_*aAK 3

基本上,如果您希望骨架类只是一个 JFrame,那么扩展它就可以了。如果您希望它具有其他功能,您需要让该类包含 JFrame 对象,如“方法 1”中所示。两种方法的工作方式相同(就作为 JFrame 对象进行操作而言),但这取决于您想在应用程序中执行什么操作。扩展 JFrame 将限制您可以执行的操作(即调用某些方法),但如果它仅充当 JFrame,则无论如何都没关系。