日期:2014-05-20  浏览次数:20776 次

高手请进!急急急急!再现等待!
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个容器么?

------解决方案--------------------
Container c=getContentPane()
取得的是这个类的容器,也就是这个Swing5_1的容器
s.getContentPane()
取得的是Swing5_1这个类的容器

所以应该是一样的,只是s.getContentPane()是对c的引用,
因为c默认是私有变量,你无法直接使用,所以用get方法间接得到c的引用

恳求楼下的指正、补充~
------解决方案--------------------

给大家介绍个技术群

大家一起学习,一起提高

30440614
------解决方案--------------------
mark
------解决方案--------------------
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()这样