Должен ли я добавить компоненты в JFrame или в его contentPane? - PullRequest
6 голосов
/ 08 января 2012

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

1 Ответ

4 голосов
/ 08 января 2012

Я предпочитаю создать JPanel (который, будучи контейнером Swing, может иметь рамку) и установить в качестве области содержимого.

Чтобы вывести JComponent из области содержимого, требуется литье, которое имеет даже худший запах, чем создание дополнительного компонента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...