JAVA教程第七講Swing用戶界面設(shè)計7.2

字號:

7.2 Swing組件和容器
    在Swing中不但用輕量級的組件替代了AWT中的重量級的組件,而且Swing的替代組件中都包含有一些其他的特性。例如,Swing的按鈕和標(biāo)簽可顯示圖標(biāo)和文本,而AWT的按鈕和標(biāo)簽只能顯示文本。Swing中的大多數(shù)組件都是AWT組件名前面加了一個"J"。
    7.2.1 組件的分類
    Jcomponent是一個抽象類,用于定義所有子類組件的一般方法,其類層次結(jié)構(gòu)如下所示:
    java.lang.Object
      |
      +--java.awt.Component
           |
           +--java.awt.Container
               |
               +--javax.swing.JComponent
    并不是所有的Swing組件都繼承于JComponent類,JComponent類繼承于Container類,所以凡是此類的組件都可作為容器使用。
    組件從功能上分可分為:
    1) 頂層容器:JFrame,JApplet,JDialog,JWindow共4個
    2) 中間容器:JPanel,JScrollPane,JSplitPane,JToolBar 
    3) 特殊容器:在GUI上起特殊作用的中間層,如JInternalFrame,JLayeredPane,JRootPane.
    4) 基本控件:實(shí)現(xiàn)人際交互的組件,如Jbutton, JComboBox, JList, JMenu, JSlider, JtextField。
    5) 不可編輯信息的顯示:向用戶顯示不可編輯信息的組件,例如JLabel, JProgressBar, ToolTip。
    6) 可編輯信息的顯示:向用戶顯示能被編輯的格式化信息的組件,如JColorChooser, JFileChoose, JFileChooser, Jtable, JtextArea。
    JComponent類的特殊功能又分為:
    1) 邊框設(shè)置:使用setBorder()方法可以設(shè)置組件外圍的邊框,使用一個EmptyBorder對象能在組件周圍留出空白。
    2) 雙緩沖區(qū):使用雙緩沖技術(shù)能改進(jìn)頻繁變化的組件的顯示效果。與AWT組件不同,JComponent組件默認(rèn)雙緩沖區(qū),不必自己重寫代碼。如果想關(guān)閉雙緩沖區(qū),可以在組件上施加setDoubleBuffered(false)方法。
    3) 提示信息:使用setTooltipText()方法,為組件設(shè)置對用戶有幫助的提示信息。
    4) 鍵盤導(dǎo)航:使用registerKeyboardAction( ) 方法,能使用戶用鍵盤代替鼠標(biāo)來驅(qū)動組件。JComponent類的子類AbstractButton還提供了便利的方法--用setMnemonic( )方法指明一個字符,通過這個字符和一個當(dāng)前L&F的特殊修飾共同激活按鈕動作。
    5) 可插入L&F:每個Jcomponent對象有一個相應(yīng)的ComponentUI對象,為它完成所有的繪畫、事件處理、決定尺寸大小等工作。 ComponentUI對象依賴當(dāng)前使用的L&F,用UIManager.setLookAndFeel( )方法可以設(shè)置需要的L&F.
    6) 支持布局:通過設(shè)置組件、最小、推薦尺寸的方法和設(shè)置X、Y對齊參數(shù)值的方法能指定布局管理器的約束條件,為布局提供支持。
    7.2.2 使用Swing的基本規(guī)則
    與AWT組件不同,Swing組件不能直接添加到頂層容器中,它必須添加到一個與Swing頂層容器相關(guān)聯(lián)的內(nèi)容面板(content pane)上。內(nèi)容面板是頂層容器包含的一個普通容器,它是一個輕量級組件。基本規(guī)則如下:
    (1)把Swing組件放入一個頂層Swing容器的內(nèi)容面板上
    (2)避免使用非Swing的重量級組件。
       
     看圖
    對JFrame添加組件有兩種方式:
    1) 用getContentPane( )方法獲得JFrame的內(nèi)容面板,再對其加入組件:frame.getContentPane().add(childComponent)
    2) 建立一個Jpanel或 JDesktopPane之類的中間容器,把組件添加到容器中,用setContentPane()方法把該容器置為JFrame的內(nèi)容面板:
     Jpanel contentPane=new Jpanel( );
     ……//把其它組件添加到Jpanel中;
     frame.setContentPane(contentPane);
     //把contentPane對象設(shè)置成為frame的內(nèi)容面板