Когда я изучал создание Java GUI: s в моем первом курсе Java, меня учили создавать мои окна как JFrame
экземпляры, а затем добавить JPanel
к каждому JFrame
и, наконец, добавить все компоненты GUI в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
просто для переносадругие компоненты.Но каковы реальные различия между подходами, кроме этого?Есть ли у одного из них какие-то большие преимущества перед другим?