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

Java 使用JPanel初始化JFrame的正确方法,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,我正在学习Java的游戏开发。下面是我学会的初始化连接到JFrame的JPanel的两种方法。两者之间有什么区别,哪一个更正确 请注意,在方法1中,骨架不扩展JFrame。在方法2中是这样的 方法1: Board.java public class Board extends JPanel { public Board() { setPreferredSize(new Dimension(300, 280)); } } public class Skeleton

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

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

方法1:

Board.java

public class Board extends JPanel {
    public Board() {
        setPreferredSize(new Dimension(300, 280));
    }
}
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);
    }
}
public class Board extends JPanel {
    public Board() {}
}
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();
    }
}
Skeleton.java

public class Board extends JPanel {
    public Board() {
        setPreferredSize(new Dimension(300, 280));
    }
}
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);
    }
}
public class Board extends JPanel {
    public Board() {}
}
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:

Board.java

public class Board extends JPanel {
    public Board() {
        setPreferredSize(new Dimension(300, 280));
    }
}
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);
    }
}
public class Board extends JPanel {
    public Board() {}
}
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();
    }
}
Skeleton.java

public class Board extends JPanel {
    public Board() {
        setPreferredSize(new Dimension(300, 280));
    }
}
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);
    }
}
public class Board extends JPanel {
    public Board() {}
}
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运行,那也没关系。

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

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