資源描述:
《高級swing容器(一)》由會員上傳分享,免費在線閱讀,更多相關內容在行業(yè)資料-天天文庫。
1、高級Swing容器(一)高級Swing容器(一)高級Swing容器(一)第10章探討了AWT與Swing中的布局管理器。在本章中,我們將會了解一些構建在這些布局管理器之上的容器以及其他的一些無需布局管理器的容器。我們的探討由Box類開始,我們將會發(fā)現使用BoxLayout管理器來創(chuàng)建一個單行或單列組件的最好方法。接下來我們會了解JSplitPane容器,他類似于其中只有兩個組件的特殊的Box。JSplitPane提供了一個分隔欄,用戶可以拖動這個分隔欄來調整組件的大小以滿足各自的需求。然后我們會探討JTabbedPane容器,其工作方工式類似于一個由CardLayout布局管理器管理的容器,
2、所不同的是容器內建的標簽可以使得我們由一個卡片移動到一個卡片。我們也可以使用JTabbedPane創(chuàng)建多個屏幕,屬性頁對話框用于用戶輸入。最后討論的兩個高級Swing容器是JScrollPane與JViewport。這兩個組件都提供了在有限的屏幕真實狀態(tài)之內顯示大組件集合的能力。JScrollPane為顯示區(qū)域添加滾動條,從而我們可以在一個小區(qū)域內在大組件周圍移動。事實上,JScrollPane使用JViewport來分割本看不見的大組件部分。下面我們就開始了解第一個容器,Box類。11.1Box類作為JComponent類的子類,Box類是借助于BoxLayout管理器創(chuàng)建單行或單列組件的
3、一個特殊JavaContainer。Box容器的作用類似于JPanel(或Panel),但是具有一個不同的默認布局管理器,BoxLayout。在Box之外使用BoxLayout有一些麻煩,而Box簡化了BoxLayout的使用。我們只需三步就可以將BoxLayout管理器與容器相關聯(lián):手動創(chuàng)建容器,創(chuàng)建布局管理器,然后將管理器與容器相關聯(lián)。當我們創(chuàng)建一個Box的實例時,我們一次就執(zhí)行了這三個步驟。另外,我們可以使用Box的名為Box.Filler的內聯(lián)類來更好的放置容器內的組件。11.1.1創(chuàng)建Box我們有三種方法來創(chuàng)建Box,一個構造函數以及兩個靜態(tài)工廠方法:publicBox(intdi
4、rection)BoxhorizontalBox=newBox(BoxLayout.X_AXIS);BoxverticalBox=newBox(BoxLayout.Y_AXIS);publicstaticBoxcreateHorizontalBox()BoxhorizontalBox=Box.createHorizontalBox();publicstaticBoxcreateVerticalBox()BoxverticalBox=Box.createVerticalBox();注意,Box類并沒有被設計用來作為JavaBean組件使用。在IDE中這個容器的使用十分笨拙。不經常使用的構造函數
5、需要布局管理器主坐標的方向。這個方向是通過BoxLayout的兩個常量來指定的:X_AXIS或Y_AXIS,分別用來創(chuàng)建水平或垂直盒子。我們無需手動指定方向,我們可以簡單的通過所提供的工廠方法來創(chuàng)建所需方向的盒子:createHorizontalBox()或createVerticalBox()。使用JLabel,JTextField與JButton填充一個水平與垂直Box演示了BoxLayout的靈活性,如圖11-1所示。對于水平容器,標簽與按鈕以其最優(yōu)的寬度顯示,因為他們的最大尺寸與最優(yōu)尺寸相同。文本域使用余下的空間。在垂直容器中,標簽與按鈕的尺寸也是他們的最優(yōu)尺寸,因為他們的最大尺寸依
6、然與他們的最優(yōu)尺寸相同。文本的高度填充了標簽與按鈕沒有使用的高度,而其寬度與容器的寬度相同。用于創(chuàng)建圖11-1所示屏幕的源碼顯示在列表11-1中。packageswingstudy.ch11;importjava.awt.BorderLayout;importjava.awt.EventQueue;importjavax.swing.Box;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JTextField;publicclassBoxSample{/
7、***@paramargs*/publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubRunnablerunner=newRunnable(){publicvoidrun(){JFrameverticalFrame=newJFrame("Vertical");verticalFrame.setDefaultClose