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