import java.awt.*;
import javax.swing.*;
public class Swing5_1 extends JFrame{
// AbstractButton a=new AbstractButton();
 Container c=getContentPane();
 JComboBox jcb=new JComboBox();
 
 
// JList l=new JList("asdas");
public Swing5_1(){
super("this is a Swing");
c.setLayout(new FlowLayout());
// c.add(jcb);
// c.add(l);
}
public static void main(String args[]){
JComboBox jcb1=new JComboBox();
Swing5_1 s=new Swing5_1();
s.setSize(400,500);
s.setVisible(true);
s.getContentPane().setLayout(new FlowLayout());
s.getContentPane().add(jcb1);
}

}请问s.getContentPane()与Container c=getContentPane();有什么关系?此程序中是定义了2个容器么?

解决方案 »

  1.   

    Container c=getContentPane()
    取得的是这个类的容器,也就是这个Swing5_1的容器
    s.getContentPane()
    取得的是Swing5_1这个类的容器所以应该是一样的,只是s.getContentPane()是对c的引用,
    因为c默认是私有变量,你无法直接使用,所以用get方法间接得到c的引用恳求楼下的指正、补充~
      

  2.   

    我感觉您说的有点问题,
    如果将Container c=getContentPane()放在主函数里确实通不过,
    但是如果不定义Container c=getContentPane()
    只有s.getContentPane()也是对的阿?
      

  3.   

    p10305119() ( ) 信誉:100    Blog   加为好友  2007-4-20 15:31:14  得分: 0  
     
     
       
    我感觉您说的有点问题,
    如果将Container c=getContentPane()放在主函数里确实通不过,
    但是如果不定义Container c=getContentPane()
    只有s.getContentPane()也是对的阿?  
     
    =============================================不定义Container c=getContentPane() 并不会影响到 s.getContentPane()的调用。在类里面定义Container c=getContentPane()只是方便你进行界面布局控制。
    而不用老是用 getContentPane()来调用如果将Container c=getContentPane()放在主函数里,是不正确的因为 getContentPane()是JFrame类的实例方法,而主函数是静态的!如果要调用就要用一个JFrame类型的实例来调用,就像s.getContentPane()这样