我应该将组件添加到JFrame还是其contentPane?

时间:2012-01-08 02:32:43

标签: java swing jframe

当我在第一个Java课程中学习创建Java GUI时,我被教会将我的窗口创建为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 个答案:

答案 0 :(得分:4)

我更喜欢创建JPanel(作为Swing容器,可以有边框)和设置它作为内容窗格。

要从内容窗格中获取JComponent,需要进行投射,这比创建额外组件的气味更差。