Frame与Panel

来源:互联网 发布:限时免费大全软件下载 编辑:程序博客网 时间:2024/06/10 22:27

Frame是框架窗体,有边框的;Panel是面板,无边框。一般把几个Panel加到一个Frame上。

Sun公司的定义:Frame是带标题和边框的最顶层窗体;Panel是个最简单的容器类,它提供空间让程序放其它组件,包括其它Panel

添加到容器中的组件放在一个列表中。列表的顺序将定义组件在容器内的正向堆栈顺序。如果将组件添加到容器中时未指定索引,则该索引将被添加到列表尾部(此后它位于堆栈顺序的底部)。

public Component getComponent(int n)获得此容器中的第n个组件。public Component[] getComponents()获得此容器中的所有组件。

 

1.1.1         Java FramePanel的区别

好象是看出区别了:FrameWindow的子类,一个Frame对象就是一个有标题有边界

的顶层窗口。Panel是最简单的容器类,是Container的子类。一个Panel对象就是要给应

用程序提供空间,用来添加组件,包括其它的Panel对象。

 

追本溯源,其实FramePanel还是有些亲戚关系的:FrameWindow的直接子类,W

indow又是Container的直接子类,而PanelContainer的直接子类,它们都是从Contai

ner里扩展出来的,是叔侄关系。它们的老祖宗是ComponentContainerComponent

子类),Component是基类,回溯本源到此为止,已经是根了。

 

FramePanel都是容器类,那么它们在使用上有什么区别呢?

 

你可以创建一个panel对象,在上面添加组件,比如单独建立一个TestPanel.java

的源文件(TestPanel extends Panel)。但是因为Panel不是顶层容器,所以你不能直

接显示你创建的这个panel对象,必须装在顶层容器里比如嵌入一个frame里,才能显示

。(为什么Frame对象可以直接显示,而Panel对象不能,文章最后有解释。)

Frame是顶层容器,一般不单独使用(注意只是一般,还是可以直接嵌入组件的),而是

习惯在frame里嵌入panel,再在panel上面添加组件。你在用Jbuilder创建一个Applica

tion(比如TestAppTestAppFrame)的时候,在你的框架文件TestAppFrame里就会自动

生成一个叫contentPaneJPanel对象。

 

Panel是一般容器,可以自身嵌套(比如在panel1里嵌入panel2);但Frame已经是

顶层容器了,自身不能嵌套。

 

我们用得最多的JFrameJPanel,就是FramePanelSwing下的扩展(JFrameFr

ame子类和JPanelPanel的子类)。

 

我们用Jbuilder创建Application时会自动生成一些代码,其中的frame.pack()一句

是什么意思?<注:frame是一个已生成的框架类对象>

 

我们在java.awt.Frame的源文件里找不到pack()方法的定义。看了java.awt.Window

才知

道,原来在Window类里定义了pack()show()两个显示窗口的方法,被Frame继承了过来

。这可能也是panel无法单独使用的一个原因吧,Panel和它的直接超类Container里,都

没有定义类似pack()show()的显示容器的方法。

0 0
原创粉丝点击