统计
  • 建站日期:2021-03-10
  • 文章总数:416 篇
  • 评论总数:0 条
  • 分类总数:21 个
  • 最后更新:4月20日
文章 未分类

JFrame的层次结构究竟是什么样的,什么又是ContentPane()

梦幻书涯
首页 未分类 正文

在学习如何向 JFrame 添加控件时,很多人都会在教科书上看到这样的语句:

getContentPane().add(……);

然后有的人就产生了疑问,为什么要这么写呢?

好像我直接写 add(……); 也可以啊?

的确,现在直接写 add(……); 是可以的,但是在 java 1.4 还是更早的年代,

这一句 getContentPane() 却是必不可少的,

这里我就不得不吐槽一下当年的 Swing 的开发人员,

明明重载一下 JFrame 的 add 方法就能解决的问题,非要我们多写这么一句……

好在后来他们终于醒悟,重载了一下 JFrame 的 addImpl 方法:

  1. protected void addImpl(Component comp, Object constraints, int index)
  2. {
  3. if(isRootPaneCheckingEnabled()) {
  4. getContentPane().add(comp, constraints, index);
  5. }
  6. else {
  7. super.addImpl(comp, constraints, index);
  8. }
  9. }

终于,我们不用再去 getContentPane() 了……

那这个神奇的 ContentPane 究竟是什么呢?

 

我们通过两个图来说明一下 JFrame 的层次结构:

从视觉效果来看(从 View 层来看),一个 JFrame 的结构是这样的:


JFrame的层次结构究竟是什么样的,什么又是ContentPane()
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第1
张图片

可以看出,

Frame 的最底层是 RootPane,

然后是 LayeredPane

再上面就是 ContentPane

最顶层是 GlassPane

最顶层的 GlassPane 默认是透明的,

关于 GlassPane 这个层次,其实有很多可以利用的技巧,以后我再慢慢告诉大家,

今天说我们的重点:ContentPane

可以看出,这个 ContentPane 就是默认盛放控件的那个层次,

那 ContentPane 在默认的情况下又是什么呢?

我们来看两个方法:

  1. JFrame 中的 getContentPane:
  2. public Container getContentPane() {
  3. return getRootPane().getContentPane();
  4. }
  5. JRootPane 中的 createContentPane:
  6. protected Container createContentPane() {
  7. JComponent c = new JPanel();
  8. ……
  9. ……
  10. return c;
  11. }

可以明显的看出,默认的 ContentPane 就是一个 JPanel,

现在我们再来看另一张图,从模型的角度来看 JFrame 的层次:


JFrame的层次结构究竟是什么样的,什么又是ContentPane()
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第2
张图片

可以看出,其实 ContentPane 是添加在 LayeredPane 上的一个控件。

而 LayeredPane 和 GlassPane 是直接添加在 RootPane 上的,

RootPane 直接添加在 JFrame 上。

其实你只要记住:

1、你现在不再需要去 getContentPane(),

2、ContentPane 默认是一个 JPanel ,

这两个结论就可以了……

版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。
版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!

这篇文章最后更新于2019-6-8,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
深入理解Java异常处理机制
« 上一篇
java getSource()和 getActionCommand()
下一篇 »

发表评论

HI ! 请登录
注册会员,享受下载全站资源特权。

最新评论

热门文章