前言:啊哈,回到学校就是出效率啊~不过又想着去复习,但是坐到电脑前面又开始看程序了,没办法,命啊……近日在弄个聊天软件,不是要登陆的么。想给登陆的界面做个CardLayout,可是问题出来了。现在单独拿出来贴几个图记录下下。
基本的JFrame的显示程序:























这个界面我就不贴了,看了皮肤不是很舒服……来看下程序中的card的show上面的那个Container,或者式show的第一个参数con。本来我的程序不是这么写的,那句创建Container是没有的,可是如果第一个参数放frame的话,编译是能通过,不过会丢出Exception:
一看是wrong parent for CardLayout,看来是CardLayout.show(parent, String)这个参数有问题。看了下JDK,这个show是这样的show (Container, String),那也就是说前面这个参数是Container的咯!!再看个类的继承树:
看到了吧,JFrame的爸爸的爸爸的爸爸,也就是爷爷的爸爸是java.awt.Container!也就是说JFrame是一种Container。为什么这里放置属于Container的JFrame就不行呢?人能吃饭,男人、女人属于人,能吃饭。太监是男人的继承子类,能吃饭,但是没嘴巴的太监是太监的继承子类,虽然都是人,但是唯独他/她/它不能吃饭,因为没嘴巴。转念一想,JFrame不是有个getContentPane()的Method么,本来就是属于Container的何必调用这个呢。既然多了这个方法,肯定不可能是return this的!通过一个不严谨的例子好像也证明不了什么,但是看到很多程序中对JFrame的操作,大多调用一个getContentPane()后对这个Container做手脚,开始不明白,直接调用这个this就可以办到的事情为什么要多此一举,原来在这里等着我那。也是,swing和AWT本来就是那种剪不断理还乱的关系,搞不好趁早SWT去……