Java学习笔记——卡式布局管理器的show

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

    基本的JFrame的显示程序:

import  java.awt. * ;
import  javax.swing. * ;

class  Demo  {
    
public static void main(String[] args) {
        
        CardLayout card 
= new CardLayout();
        JFrame frame 
= new JFrame ("CardLayout 布局测试");
        frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        JLabel label1 
= new JLabel("lable1");
        JLabel label2 
= new JLabel("label2");
        frame.setLayout (card);
        
        frame.add (label1, 
"l1");
        frame.add (label2, 
"l2");
        frame.setSize(
100100);
        Container con 
= frame.getContentPane ();
        card.show (con, 
"l2");
        frame.setVisible (
true);
    }

}

     这个界面我就不贴了,看了皮肤不是很舒服……来看下程序中的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去……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值