private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());

this.jContentPane.add(new listpanel(this.jFrame));
}
return jContentPane;
}
我想问的是为什么一定要jContentPane.setLayout(new BorderLayout());之后才有按钮点击换页面,如果是jContentPane.setLayout(null);就没有的,还有this.jContentPane.add(new listpanel(this.jFrame));这句话的意思是说在容器里面添加一个面板?

解决方案 »

  1.   

    jContentPane = new JPanel();
    说明jContentPane是个JPanel的对象,而JPanel的默认布局是FlowLayout.jContentPane.setLayout(new BorderLayout());
    是将这个JPanel的对象的布局设置为边框布局,什么边框布局?就是四个人坐在一起打麻将。如果jContentPane.setLayout(null);那么所有组件放进去的时候,就没有布局。没有布局的话,需要人工调用xxx.setBounds(x,y,width,height);设置组件的坐标位置和宽高。没有设置就宽高默认为0。this.jContentPane.add(new listpanel(this.jFrame));这句话就要看那个listpanel类型的构造函数是怎么写的了,这个大概是你自定义的类。但不管怎样,这句话就是把listpanel的一个对象放置到你刚刚创建的jContentPane中。
      

  2.   

    jContentPane.setLayout(null)
    即不使用布局管理器,需要你自己指定每个控件的大小和位置(setBounds)jContentPane.setLayout(new BorderLayout())
    使用了 BorderLayout 布局管理器,控件位置和大小由布局管理器控制this.jContentPane.add(new listpanel(this.jFrame));
    在 BorderLayout 布局管理器下,默认为添加到 jContentPane 的中部位置
      

  3.   

    记得好像1.6之后就不用往jContentPane里添加了,直接添加到frame也行