點(diǎn)擊查看:2015計(jì)算機(jī)等級(jí)考試二級(jí)Java入門(mén)教程章節(jié)匯總
點(diǎn)擊查看:2015計(jì)算機(jī)等級(jí)考試二級(jí)Java入門(mén)教程第十二章匯總
12.3 組件和容器
組件表示能夠顯示在屏幕上的各種圖形化的實(shí)體。組件是Component子類的仔何一個(gè)對(duì)象正像我們已經(jīng)看到的,JFrame窗口是一個(gè)組件,但不包含其他的子類。在研究特定的組件之前。我們先看一看表示組件的類組之間的一般關(guān)系。以Component為基礎(chǔ)的一類層次如下圖所示,示意圖中的箭頭指向超類。
這個(gè)示意圖顯示了Component的一些子類,其中有些對(duì)我們很重要。我們已經(jīng)討論了通往JFrame類的這條鏈,其他的分支是新的。所有由Container派生的類都可以包含Component派生的任何類的對(duì)象,通常被稱作容器(Container).由于Container類是Coinponen類的子類,每個(gè)容器對(duì)象也是一個(gè)Component,所以一個(gè)容器又一可以包含另外一些除Window類私其子類以外的容器,即Window類型(或子類)的對(duì)象不能包含在其他的容器中。如果你這樣做,就會(huì)出現(xiàn)一個(gè)異常。JCornponent類是窗口中GUI部分使用的所有Swing組件的基礎(chǔ):
由于這個(gè)類是由Container派生來(lái)的,所以,全部的Swing組件都是容器。
正像你所看到的,JApplet類是所有Swing小應(yīng)用程序的基類。它從Component通過(guò)cotainer類派生而來(lái)它還從擴(kuò)展、改進(jìn)的舊Applet類中繼承了方法。你應(yīng)該注意到JApplet,JFrarme, JDialog、Jcomponet類和其子類都在javax.swing包中。Applet類在java.applet中聽(tīng)有其他的類在java.awt.java.applet包很小,只包含一個(gè)類加上3個(gè)相關(guān)的接口,我們并不需要直接使用它。我們常常使用JApplet類定義小應(yīng)用程序,這比Applet更有意義。
Window和Frame組件
JFrame對(duì)象和Window對(duì)象之間的基本區(qū)別是,JFrarne對(duì)象描述的是應(yīng)用程序的主窗口,而window對(duì)象不是這樣。在你創(chuàng)建window對(duì)象之前,總需要一個(gè)JFrame對(duì)象。
由于Jdialog類直接由Window類派生而來(lái),所以你只能在JFrame對(duì)象中創(chuàng)建應(yīng)用程序中的JDialog對(duì)象除了默認(rèn)的構(gòu)造函數(shù)外,JDialog類的構(gòu)造函數(shù)通常需要一個(gè)JFrarme.對(duì)象作為自變量傳遞進(jìn)來(lái)。JFrame對(duì)象稱為JDialog對(duì)象的父類。JFrame對(duì)象有一個(gè)可調(diào)整大小的邊框,它可以包含一個(gè)內(nèi)置的菜單欄,由于JFrame對(duì)一象是應(yīng)用程序中的頂層窗口,所以定義的大小和位置與屏幕有關(guān)。以JFrame對(duì)象為父類的JDialog對(duì)象的定位與其父類相關(guān)。
讓我們總結(jié)一下,通常你將如何使用我們已經(jīng)討論過(guò)的層次中的關(guān)鍵類。
正像我們所說(shuō)的,JApplet, JFrame和JDialog類都是容器,這是因?yàn)樗鼈兌家訡ontaine作為基類,所以原則上可以包含任何類的組件。由于它們最終由component派生而來(lái)。所以它們自已也都是組件但有些事情并不像組件那么簡(jiǎn)單,你不能直接地為應(yīng)用程序或小于程序的GLI將組件添加到程序的JFranme或JApplet對(duì)象。讓我們看看練習(xí)中的的實(shí)際工作過(guò)程。
窗口面板
當(dāng)你想在窗口中添加GUI組件或繪圖時(shí),通過(guò)JFrame對(duì)象添加的組件或在其上面繪畫(huà)的內(nèi)容顯示在又JFrame對(duì)象管理的窗口面板中。小應(yīng)用程序也是如此:概括地講。窗口面板是一個(gè)包含描述窗口區(qū)域的對(duì)象,他們呢來(lái)自幾種不同的類型。
我們將使用個(gè)大家都稱為內(nèi)容面板的窗口面板。而不使用其他的面板:contcntPane對(duì)象之間、其他窗口面板與應(yīng)用程序本身的關(guān)系顯示在這里。
正像你所看到的,在JFrame窗口中標(biāo)題欄下面的區(qū)域?qū)?yīng)JRootPane對(duì)象,這個(gè)對(duì)象包含了其他的面板。說(shuō)明中的layeredPane對(duì)象是JlayeredPane類型的。這個(gè)面板對(duì)應(yīng)窗口中JRootPane對(duì)象占據(jù)的整個(gè)區(qū)域。如果窗口有菜單欄的話,還要進(jìn)行管理。 layerPane中菜單欄下面的區(qū)域就是contentPane對(duì)象,最典型地是在這里添加GUI組件:你還可以在內(nèi)容面板覆蓋的區(qū)域顯示文字或進(jìn)行任何繪畫(huà)。layeredPane對(duì)象擁有特別的屬性供高級(jí)應(yīng)用程序使用,它允許使用而板中組件組覆蓋另一個(gè)組件組的分層方式進(jìn)行竹理。使用這種功能,你可以控制組件與另一個(gè)組件的關(guān)聯(lián)顯示。在這里,因?yàn)閷影磸暮笙蚯暗奶囟樞蝻@示,所以。在層中前面的組件將位于屏幕該層的后面。
還有一個(gè)輔助的面板沒(méi)有顯示在示意圖,這就是glassPane對(duì)象。這個(gè)對(duì)象也對(duì)應(yīng)全部的JRootPane區(qū)域。g1assPane象的內(nèi)容顯示在所有其他面板的頂層,因此,這個(gè)類可用來(lái)很示你想要永遠(yuǎn)顯示在窗口中其他內(nèi)容之上的組件,例如下拉式菜單、你也可以使用glassPane顯示需要頻繁更新的圖形,如建立動(dòng)畫(huà),當(dāng)你顯示示的內(nèi)容是動(dòng)畫(huà)時(shí),靜態(tài)的背景可以通過(guò)contentPane單獨(dú)地進(jìn)行顯示。由于每次動(dòng)畫(huà)對(duì)象需要重畫(huà)時(shí)不需要重新處理背景,所以整個(gè)過(guò)程效率要高得多。
JIFrame類定義了幾個(gè)方法以供你引用們幾何面板:
這里討論的表示面板的所有類本身都是Swing的組件,它們?cè)趈avax,swing包中定義、JApplet對(duì)象與JFrame對(duì)象的面板參數(shù)相同,所以,向小應(yīng)用程序添加組件或繪圖的操作完全一樣由JApplet對(duì)象定義的小應(yīng)用程序,也可以擁有應(yīng)用程序窗口那樣的菜單欄。
所有的面板以及菜單欄都是組件,因此在我們開(kāi)始研究如何向窗口中添加菜單欄或其他組件之前,先更詳細(xì)地看看一般組件的組成。
相關(guān)推薦:
2015計(jì)算機(jī)等級(jí)考試二級(jí)Java入門(mén)教程章節(jié)匯總
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |