java panel frame_Java 版 (精华区)--Frame和Panel的区别【转载】
初學Java的時候一直弄不清Frame和Panel的區別,都是在上面裝組件,也沒看出什
么所以然,一直稀里糊涂地用。最近看來一下Java類庫中幾個主要類的源文件,才明白
了一點所以然。寫下了此文,希望能給大家一點幫助。
讓我們先看一看原始文件中的定義:
[Frame]
A Frame is a top-level window with a title and a border.
[Panel]
Panel is the simplest container class. A panel provides space in
which an ap
plication can attach any other component, including other
panels.
好象是看出區別了:Frame是Window的子類,一個Frame對象就是一個有標題有邊界
的頂層窗口。Panel是最簡單的容器類,是Container的子類。一個Panel對象就是要給應
用程序提供空間,用來添加組件,包括其它的Panel對象。
追本溯源,其實Frame和Panel還是有些親戚關系的:Frame是Window的直接子類,W
indow又是Container的直接子類,而Panel是Container的直接子類,它們都是從Contai
ner里擴展出來的,是叔侄關系。它們的老祖宗是Component(Container是Component的
子類),Component是基類,回溯本源到此為止,已經是根了。
Frame和Panel都是容器類,那么它們在使用上有什么區別呢?
你可以創建一個panel對象,在上面添加組件,比如單獨建立一個TestPanel.java
的源文件(TestPanel extends Panel)。但是因為Panel不是頂層容器,所以你不能直
接顯示你創建的這個panel對象,必須裝在頂層容器里比如嵌入一個frame里,才能顯示
。(為什么Frame對象可以直接顯示,而Panel對象不能,文章最后有解釋。)
Frame是頂層容器,一般不單獨使用(注意只是一般,還是可以直接嵌入組件的),而是
習慣在frame里嵌入panel,再在panel上面添加組件。你在用Jbuilder創建一個Applica
tion(比如TestApp和TestAppFrame)的時候,在你的框架文件TestAppFrame里就會自動
生成一個叫contentPane的JPanel對象。
Panel是一般容器,可以自身嵌套(比如在panel1里嵌入panel2);但Frame已經是
頂層容器了,自身不能嵌套。
我們用得最多的JFrame和JPanel,就是Frame和Panel在Swing下的擴展(JFrame是Fr
ame子類和JPanel是Panel的子類)。
我們用Jbuilder創建Application時會自動生成一些代碼,其中的frame.pack()一句
是什么意思?
我們在java.awt.Frame的源文件里找不到pack()方法的定義。看了java.awt.Window
才知
道,原來在Window類里定義了pack()和show()兩個顯示窗口的方法,被Frame繼承了過來
。這可能也是panel無法單獨使用的一個原因吧,Panel和它的直接超類Container里,都
沒有定義類似pack()和show()的顯示容器的方法。
總結
以上是生活随笔為你收集整理的java panel frame_Java 版 (精华区)--Frame和Panel的区别【转载】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在线html转ipa,iphone在线安
- 下一篇: html5后代选择符,css选择符有哪些