对JFrame的getContentPane()的一些推测。

大一下学期开始学习JAVA,这个星期开始学JAVASwing,对于JFrame顶级容器并不了解,通过查询网上的一些信息结合自己的推理,得到以下的一些猜测。如有不对,实属正常,请指出错误,勿喷。首先我创建一个JFrame窗口,并用其引用设置窗口背景颜色,显然窗口颜色没有改变,(图一)。后面用getContentPane().setBackground()方法设置窗口颜色,运行后窗口背景颜色确实改变了(图二)。说明在创建JFrame实例的过程中就已经自动为JFrame加上了一个默认的ContentPanePS默认的这个ContentPane是什么类型的容器,有人说是JPanel类型,但是JPanel的默认布局管理器是FlowLayout,而这个默认的ContentPane的布局管理器是BorderLayout,这就是为什么通过JFrameadd()方法添加组件只能显示最后添加一个。所以我觉得默认的ContentPane类型应该不是JPanel类型。)所以只有使用getContentPane().setBackground()才能够改变窗口的背景颜色,因为现在我们在窗口看见的是这个默认的ContentPane而不是JFrame。接着利用getContentPane()方法,创建了两个引用,ct1,ct2,这里说明一下,使用getContentPane()方法返回的对象都是同一个对象,例如我通过ct2也改变了窗口的颜色,通过ct1,ct2add()方法添加组件也就相当于JFrame实例的add()方法添加组件。同理,用setContentPane(XX)JFrame设置窗口面板,将使得JFrame的默认面板改为XX。(图三图四图五图六)。接下来,我又创建了一个JPaneld的实例,并把这个实例添加到JFrame实例中。这里有个问题,就是添加的这个JPanel的实例是与默认的ContentPane同级还是被添加到默认的ContentPane面板上?答案是和其它组件一样被添加到默认的ContentPane面板上,可以通过下面这个程序证明,利用.getParent()方法,知道JPanel实例被添加到了默认的ContentPane上。还有System.out.println(jf1.getContentPane()==jf1.getRootPane().getContentPane());也是得到true。因为JFrame一共分为RootPaneLayeredPaneContentPane。我们得到那个默认的ContentPane就是在ContentPane这层。之后加入的JPanel容器与实例等这些都将加入到这层上,不会被加到LayeredPane上,但是菜单栏例外。(结构图在图七)。以上全部为我猜想的,如果有误请大哥们指出。我马上改正。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值