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

标签 java swing jframe jpanel

我正在学习使用 Java 进行游戏开发。这是我学会的初始化附加到 JFrame 的 JPanel 的 2 种方法。两者有什么区别,哪个更正确?

请注意,在方法 1 中,Skeleton 不扩展 JFrame。在方法 2 中是这样。

方法一:

Board.java

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

骨架.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);
    }
}

方法二:

Board.java

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

骨架.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();
    }
}

最佳答案

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

关于java - 使用 JPanel 初始化 JFrame 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21343942/

相关文章:

java - 使 JTable 可滚动

Swing 中的 Java ProgressBar

java - 运行 JPanel 窗体

java - 如何停止执行Java代码并等待ActionEvent?

java - JApplet 将启动但未初始化

java - 缩小 JFrame 会导致绘图消失;靶心边框不显示

java - 使用枢轴元素对数组进行分区的算法

java - ConcurrentHashMap 的迭代

c# - 在 C# 中创建 ASN1 编码签名以发送到 Java

java - 如何从函数返回 JButton 并使用它在 java 中的不同类中执行操作?