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