当我在第一个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
。但是这些方法之间的真正区别是什么呢?他们中的任何一方有没有比另一方更大的好处?
答案 0 :(得分:4)
我更喜欢创建JPanel
(作为Swing容器,可以有边框)和设置它作为内容窗格。
要从内容窗格中获取JComponent
,需要进行投射,这比创建额外组件的气味更差。