2014-01-24 5 views
5

Я изучаю разработку игр на Java. Вот два способа, которым я научился инициализировать JPanel, прикрепленный к JFrame. Каковы различия между этими двумя, и какой из них был бы более правильным?Правильный способ инициализации JFrame с помощью JPanel

Обратите внимание, что в Метод 1, Скелет не расширяет 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(); 
    } 
} 

ответ

3

В принципе, если вы хотите, чтобы ваш класс скелет только быть JFrame, вы будете в порядке его продления. Если вы хотите, чтобы у него были другие функции, вы захотите, чтобы класс содержал объект JFrame, как в вашем «методе 1». Оба метода будут работать одинаково (с точки зрения работы как объекта JFrame), но это вопрос того, что вы хотите сделать в приложении. Расширение JFrame ограничит то, что вы можете сделать (например, вызов определенных методов), но если он функционирует только как JFrame, это не имеет значения.

2

Вы должны искать наследование. Когда класс А расширяет класс B, класс А является классом B.

Например, если я делаю классный автомобиль, то сделайте класс BMW, логично, что BMW расширяет классный автомобиль, поскольку BMW - это автомобиль. BMW наследует все методы в классе автомобиля, потому что логически, BMW может делать то, что может сделать стандартный автомобиль. Тем не менее, BMW может сделать дополнительные вещи, поэтому вы можете переопределить методы и написать новые методы в классе BMW, которые могут использовать только класс BMW (и любой класс, наследующий BMW). Переопределение метода переписывает метод из суперкласса (класс Car) в классе child (класс BMW), заголовок дочернего метода должен быть точно таким же, как заголовок супер метода, но методы могут делать разные вещи. В первом классе Скелет не является JFrame, а во втором скелете - JFrame.

Смежные вопросы