JAVA GUI編程之布局管理器


JAVA的GUI(圖形用戶界面)由各種組件構成,主要分為AWT組件(java.awt)以及功能更強的Swing組件(javax.swing)兩種。

組件可以分為容器組件和非容器組件。容器組件是指可以包含其他組件的組件,又分為頂層容器和一般用途容器。非容器組件則必須包含在容器中。

組件的布局,包含各組件的位置和大小,通常由布局管理器負責。每個容器,都有一個默認的布局管理器,可以通過容器的setLayout()方法改變容器的布局管理器。

接下來介紹一下Java提供的幾個常用的布局管理器。

1.FlowLayout

定義在java.awt包中。布局方式為:將組件逐個放置在容器中的一行上,一行放滿就另起一個新行。

構造方式有3種:

FlowLayout():默認,居中對齊,水平和垂直間距是5個像素。

FlowLayout(int align):align指定對齊方式,水平和垂直間距是5個像素。align的可取的值有FlowLayout.LEFT、FlowLayout.RIGHT、FlowLayout.CENTER。

FlowLayout(int align,int hgap,int vgap):align指定對齊方式,hgap指定水平間距,vgap指定垂直間距。

與其他布局管理器不同的是,FlowLayout不強行設定組件的大小,允許組件擁有自定義的尺寸。每個組件都有getPreferredSize()方法,容器的布局管理器會調用這一方法取得每個組件自定義的大小。

 

2.BorderLayout

定義在java.awt包中。是頂層容器(JFrame、JApplet、JDialog、JWindow)中內容窗格(Container contentPane,內容窗格獲取方法getContentPane())的默認布局管理器。

提供了一種較為復雜的組件布局管理:將容器划分為5個區域,東(BorderLayout.NORTH)南(BorderLayout.SOUTH)西(BorderLayout.WEST)北(BorderLayout.EAST)中(BorderLayout.CENTER),每個區域可添加一組件。

構造方式有2種:

BorderLayout():默認,組件之間沒有間距。

BorderLayout(int hgap,int vgap):指定水平間距(hgap),垂直間距(vgap)。

組件的添加:

組件必須通過add()方法加入到容器中的指定區域。默認放置在Center區域。

如果希望在某個區域顯示多個組件,可以先在該區域放置一個內部容器,比如JPanel組件,然后將所需的多個組件放到JPanel中,再將其放到指定的區域。通過內部容器的嵌套可以構造復雜的布局。

 

3.GridLayout

定義在java.awt包中。布局為網格式,將容器划分成若干行乘若干列的網格,組件依次放入其中,每個組件占據一格。

構造方式有3種:

GridLayout():只有一行的網格,網格的列數根據實際需要變化。

GridLayout(int rows,int cols):指定行數(rows),列數(cols)。

GridLayout(int rows,int cols,int hgap, int vgap):指定行數(rows),列數(cols),指定水平間距(hgap),垂直間距(vgap)。

 

rows,cols可以為0(大小根據實際需要變動),但是不可同時為0。網格每列的寬度都是相同的,網格每行的高度也是相同的。組件被放入容器的次序決定位置,從左至右依次填充,一行用完后轉入下一行。留白可以添加一個空白標簽。

網格個數與組件個數的關系:多添少補(空白標簽)。

容器大小改變,組件相對位置不變,大小隨之改變。

 

4.CardLayout

定義在java.awt包中。布局為卡片式,將容器處理為一系列的卡片,每一時刻只顯示其中的一張,容器充當卡片的容器。

顯示規則為先進先顯示。卡片的順序由組件對象本身在容器內部的順序決定。

構造方式有2種:

CardLayout():默認,無間距。

CardLayout(int hgap,int vgap):指定水平間距(hgap),指定垂直間距(vgap)。

常用方法:

add():容器添加組件。

public void first(Container parent):翻轉到容器的第一張。
public void next(Container parent):翻轉到容器的下一張。到底則翻首張。
public void previous(Container parent):翻轉到容器的前一張。到頭則翻末張。
public void last(Container parent):翻轉到容器的最后一張。
public void show(Container parent, String name):翻轉已添加的指定name卡片。不存在則沒有反應。

 

5.BoxLayout

定義在javax.swing包中。布局方式為:將組件按水平方向排成一行,或者按垂直方向排成一列。

排成一行每個組件可以有不同的寬度;排成一列每個組件可以有不同的高度。

構造方法只有1種:

BoxLayout(Container target,int axis):容器對象參數target指定要應用布局的容器,axis設置按水平方向排列(BoxLayout.X_AXIS)或按垂直方向排列(BoxLayout.Y_AXIS)。

 

在javax.swing包中定義了專門使用BoxLayout的容器——Box類。

創建Box靜態方法:

public static BoxcreateHorizontalBox():水平方向的BoxLayout。

public static BoxcreateVertitcalBox():垂直方向的BoxLayout。

創建Box不可見組件的方法:

作用是可以增加課件組件之間的距離。

public static Componet createHorizonalGlue()。
public static Componet createVerticalGlue()。
public static Componet createHorizonalStrut(int width)。
public static Componet createVerticalStrut(int height)。
public static Componet createRigidArea(Dimension d)。

 

6.空布局

特殊場合可以不適用布局管理器。

調用容器的setLayout(null)將布局管理器設置為空,然后調用組件的setBounds(int x, int y, int width, int height)設置組件大小位置。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM