本人因?yàn)樽鲆粋€(gè)SWING計(jì)算器的緣故開(kāi)始接觸SWING,在這里本人不會(huì)去研究Swing是否之類無(wú)聊話題,
希望大家能和我一起以一種熱情,自信,不怕失敗的態(tài)度學(xué)習(xí)SWING的使用,謝謝!
內(nèi)容及代碼來(lái)自:http://www.mycnknow.com? 本人只是負(fù)責(zé)錯(cuò)誤代碼改動(dòng)和代碼解說(shuō)
簡(jiǎn)介
1-1:Swing常用的package
??????????? PACHAGE???????????????????????? |???????????????????? 內(nèi)????????? 容
????????? -----------------|-------------------------------
?????????? javax.swing????????????????????????? |???????? 最常用的pachage,包含了各種swing組件的類
?????????? javax.swing.border?????????????? |???????? 包含與swing組件外框有關(guān)的類
?????????? javax..swing.colorchooser????|???????? 針對(duì)swing調(diào)色盤(pán)組件(JColorChooser)所設(shè)計(jì)的類
?????????? javax.swing.event???????????????? |???????? 處理由swing組件產(chǎn)生的事件,有別于AWT事件
?????????? javax.swing.filechooser?????????|???????? 包含針對(duì)swing文件選擇對(duì)話框(JFileChooser)所設(shè)計(jì)的類
????????? ----------------------------------------------
?????????? javax.swing.plaf??????????????????? |???????? 處理swing組件外觀的相關(guān)類
?????????? javax.swing.plaf.basic?????????? |????????
??????????? javax.swing.plaf.metal???????????|????????
?????????? ?javax.swing.plaf.multi??????????? |?
?????????? ----------------------------------------------??????
?????????? javax.swing.table????????????????? |???????? 針對(duì)swing表格組件(JTable)所設(shè)計(jì)的類
?????????? ----------------------------------------------
?????????? javax.swing.text??????????????????? |???????? 包含與swing文字組件相關(guān)的類
?????????? javax.swing.text.html???????????? |
??????????? javax.swing.text.html.parser?? |
??????????? javax.swing.text.rtf????????????????|
?????????? ----------------------------------------------
?????????? javax.swing.tree???????????????????|???????? 針對(duì)swing樹(shù)關(guān)元件(JTree)所設(shè)計(jì)的類
?????????? javax.swing.undo???????????????? |???????? 提供swing文字組件Redo或Undo的功能
1-2:swing的版面結(jié)構(gòu)
?? Swing中幾乎所有組件都是從JComponent衍生而來(lái),也就是說(shuō)這些組件都是lightweight Component,均由純java code所編寫(xiě)面成
、Swing中以下幾個(gè)組件不是由JComponent繼承面來(lái):
??? JFrame(JRoot Pane)
??? JDialog(JRoot Pane)
??? JWindow(JRoot Pane)
??? JApplet(JRoot Pane)
? 以上四個(gè)組件是heavyweight Component,必須使用到native code來(lái)畫(huà)出這四個(gè)窗口組件,因?yàn)橐诓僮飨到y(tǒng)中顯示窗口畫(huà)面,必
須使用操作系統(tǒng)的窗口資源,而以往的AWT組件大多使用native code所構(gòu)造出來(lái),因此Swing中的JFrame便繼承原有AWT中的Frame
類,面不是繼承JComponent類。同樣,JApplet是繼承原有AWT中的JApplet類,也不是繼承JComponent類。
??? JFrame、JDialog、JWindow及JApplet這四個(gè)組件統(tǒng)稱為最上層組件,因?yàn)槠溆嗟膕wing組件都必須依附在此四組件之一上才能
顯示出來(lái)。此四組件均實(shí)現(xiàn)(Implement)RootPaneContainer這個(gè)界面(Interface),此界面定義了各種容器取得與設(shè)置并不是真實(shí)的容器,它是由Glass Pane
與Layered Pane所組成(Layered Pane里擁有Content Pane與Menu Bar,而Menu Bar可選擇使用或不使用),
我們不能在JRootPane上加入任何的組件,因?yàn)樗皇且粋€(gè)虛擬的容器,若要在最上層組件上加入組件,必須加在Layered Pane或是
Layered Pane里的Content Pane上。以JFrame為例,一般我們要在JFrame上加入其他組件(如JButton、JLabel等)必須先取得JFrame
的Content Pane,然后將要加入的組件放在此Content Pane中,而不是直接就加到JFrame上。因此若要在JFrame中加入一個(gè)按鈕,不
能像以前AWT時(shí)一樣寫(xiě)成frame.add(button)的形式,而必須先取得JFrame的Content Pane,然后將按鈕加入Content Pane中,如:
?? frame.getContentPane().add(button)
否則在編譯的時(shí)候?qū)⒂绣e(cuò)誤信息產(chǎn)生。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
注意:
1.組件必須加在容器中,而容器本身具有層次性的關(guān)系,就如同珠寶盒一般,大盒子里面可以放小盒子,小盒子里面還可以放更小的盒子,而珠寶就可以放
在某一個(gè)盒子中,這里的珠寶就代表組件,盒子就代表容器。因此若您想在JFrame加入任何組件時(shí),必須
先取得JFrame的容器來(lái)放置這些組件,而由于JFrame、JDialog、JWindow與JApplet是顯示Swing組件的源頭,我們可以稱它們?yōu)楦?br />組件,也就是所謂的最上層組件。
2.RootPaneContainer它是一個(gè)interface,共有5個(gè)類實(shí)現(xiàn)(Implement)它,分別是JFrame、JAppleet、JWindow、JDialog、
JInternalFrame,其中JInternalFrame是一個(gè)lightweight Component,它不是一個(gè)最上層組件,也就是說(shuō)JInternalFrame不能單獨(dú)顯示出來(lái),必須依附在最上
層組件中,我們將在下面討論組件,而JFrame,JApplet,JWindow,JDialog均為最上層組件。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
RootPaneContainer定義了下面幾種方法:
??? 方法
? Container?????? getContentPane()返回contentPane
? Component?????? getGlassPane()返回glassPane
? JLayeredPane??? getLayeredPane()返回layeredPane
? JRootPane?????? getRootPane返回屬于這個(gè)組件的JRootPane
? Void??????????? setContentPane(Container contentpane)設(shè)置ContentPane
? Void??????????? setGlassPane(Component glassPane)設(shè)置GlassPane
? Void??????????? setLayeredPane(JLayeredPane layeredPane)設(shè)置LayeredPane
JFrame如何取得Content Pane的實(shí)際流程,下面是一段很簡(jiǎn)單的程序代碼:
? public class Simple{
??? Simple(){
?????? JFrame frame=new JFrame();
?????? Container contentPane=frame.getContentPane();
?????? JButton button=new JButton();
?????? contentPane.add(button);
??? }
? }
當(dāng)我們寫(xiě)frame.getContentPane()時(shí),會(huì)返回此frame的Content Pane,也就是一個(gè)容器組件,有了容器之后我們才能將button組件
擺進(jìn)去,此時(shí)JFrame才算擁有button組件。所以JFrame就好像是一塊空地,要在這空地上信人應(yīng)該先蓋一棟房子(容器),然后人
、家具、設(shè)備等等(組件)就能搬進(jìn)此房子中。下面的層次結(jié)構(gòu)說(shuō)明了最上層組件都含有JRootPane組件,JRootPane本身就含有容
器組件,可讓最上層組件裝入其他的組件。
????? |Frame------JFrame(JRoot Pane)
????? |
Window|Dialog-----JDialog(JRoot Pane)
????? |
????? |
????? |-----------JWindow(JRoot Pane)
Applet -----------JApplet(JRoot Pane)
圖示:
???????? |Grass Pane
???????? |
Root Pane|
???????? |??????????? |Content Pane
???????? |Layered Pane|
????????????????????? |Menu Bar
?
地震讓大伙知道:居安思危,才是生存之道。
