Когда я научился создавать Java GUI в моем первом курсе Java, меня учили создавать свои окна как экземпляры JFrame
, а затем добавлять JPanel
к каждому JFrame
и, наконец, добавить все компоненты графического интерфейса в JPanel
:
class Example extends JFrame {
Example() {
JPanel panel = new JPanel();
this.add(panel);
// Create components here and add them to panel
// Perhaps also change the layoutmanager of panel
this.pack();
this.setVisibility(true);
}
public static void main(String[] args) {
new Example();
}
}
Я всегда думал: «ну, это немного пахнет; мне не нравится создавать дополнительный объект, чтобы просто быть контейнер ", но я не знал другого способа сделать это, поэтому просто продолжил. До недавнего времени, когда я наткнулся на этот «шаблон»:
class AnotherExample extends JFrame {
AnotherExample() {
Container pane = this.getContentPane();
// Add components to and change layout of pane instead
this.pack();
this.setVisibility(true);
}
public static void main(String[] args) {
new AnotherExample();
}
}
Еще будучи новичком в Java, мне нравится второй подход только потому, что он не предполагает создания JPanel
только для того, чтобы обернуть другой компоненты. Но каковы реальные отличия подходов, кроме этого? Есть ли у одного из них какие-то большие преимущества перед другим?