美文网首页
JFrame 移除组件

JFrame 移除组件

作者: Alex_1799 | 来源:发表于2018-06-30 19:08 被阅读0次

在学习如何向 JFrame 添加控件时,很多人都会在教科书上看到这样的语句:
getContentPane().add(……);
然后有的人就产生了疑问,为什么要这么写呢?
好像我直接写 add(……); 也可以啊?
的确,现在直接写 add(……); 是可以的,但是在 java 1.4 还是更早的年代,
这一句 getContentPane() 却是必不可少的,

这里我就不得不吐槽一下当年的 Swing 的开发人员,
明明重载一下 JFrame 的 add 方法就能解决的问题,非要我们多写这么一句……
好在后来他们终于醒悟,重载了一下 JFrame 的 addImpl 方法:
protected void addImpl(Component comp, Object constraints, int index)
{
if(isRootPaneCheckingEnabled()) {
getContentPane().add(comp, constraints, index);
}
else {
super.addImpl(comp, constraints, index);
}
}
终于,我们不用再去 getContentPane() 了……
那这个神奇的 ContentPane 究竟是什么呢?
我们通过两个图来说明一下 JFrame 的层次结构:
从视觉效果来看(从 View 层来看),一个 JFrame 的结构是这样的:


image.png
可以看出,
Frame 的最底层是 RootPane,
然后是 LayeredPane
再上面就是 ContentPane
最顶层是 GlassPane

最顶层的 GlassPane 默认是透明的,
关于 GlassPane 这个层次,其实有很多可以利用的技巧,以后我再慢慢告诉大家,
今天说我们的重点:ContentPane
可以看出,这个 ContentPane 就是默认盛放控件的那个层次,
那 ContentPane 在默认的情况下又是什么呢?

我们来看两个方法:

JFrame 中的 getContentPane:

public Container getContentPane() {
return getRootPane().getContentPane();
}

JRootPane 中的 createContentPane:

protected Container createContentPane() {
JComponent c = new JPanel();
……
……
return c;
}

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

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


image.png

可以看出,其实 ContentPane 是添加在 LayeredPane 上的一个控件。
而 LayeredPane 和 GlassPane 是直接添加在 RootPane 上的,
RootPane 直接添加在 JFrame 上。

其实你只要记住:
1、你现在不再需要去 getContentPane(),
2、ContentPane 默认是一个 JPanel ,
这两个结论就可以了……


image

相关文章

  • JFrame 移除组件

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

  • 最近一周学习生活上遇到的问题及解决方法

    添加按钮: 1. JFrame frame=new JFrame("Java按钮组件示例"); //创建...

  • 章节笔记——GUI图形化界面

    JFrame的方法 (awt包) 面向对象的使用 类继承JFrame 定义组件 主函数调用自己的构造方法 只new...

  • java GUI复习笔记

    常见Swing组件类 1.JFrame窗体框架类setDefaultCloseOperation()是用来设定窗口...

  • 移除cocoapods

    1、查看CocoaPods组件安装位置: 结果: 2、手动移除这个组件: 3、移除RubyGems中的CocoaP...

  • 五子棋

    一、知识准备 swing组件完成图形用户界面,窗体 JFrame创建窗体,是swing中基础的类之一 public...

  • 卸载当前CocoaPods并安装指定版本

    查看组件位置并移除 查看当前版本 结果 移除 输入y确定 安装指定版本

  • Java自学-图形界面 容器

    Swing 的容器 JFrame和JDialog java的图形界面中,容器是用来存放 按钮,输入框等组件的。 窗...

  • JFrame

    简单记录一下JFrame的用法首先创建一个extends了JFrame的class 这个class里面没有内容 所...

  • tomcat优化

    1.配置优化 conf/web.xml优化 移除视图层组件JspServlet不使用jsp情况下可以移除 移除we...

网友评论

      本文标题:JFrame 移除组件

      本文链接:https://www.haomeiwen.com/subject/ldcxuftx.html