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