首頁 > 軟體

Java Swing的布局管理器範例介紹

2019-12-09 23:05:43

在Swing的實際開發中,開發人員在新增元件到容器中的時候可以自由調整元件的大小和在容器中的位置,這樣雖然很靈活,但操作起來卻很麻煩。為了加快開發速度,Java 提供了一些布局管理器,它們可以將元件進行統一管理,這樣開發人員就不需要考慮元件是否會重疊等問題。今天小編就和大家一起來學習和回顧一下Swing的幾種布局管理器的布局方式,布局特點,各種布局方式的使用,並為每一種布局方式附上一個小例子,方便大家理解。


1

BorderLayout(邊框布局管理器)是 Window、JFrame 和 JDialog 的預設布局管理器。

邊框布局管理器將視窗分為 5 個區域:North、South、East、West 和 Center。

構造方法1:

BorderLayout():建立一個 Border 布局,元件之間沒有間隙。


構造方法2:

BorderLayout(int hgap,int vgap):建立一個 Border 布局,其中 hgap 表示元件之間的橫向間隔;vgap 表示元件之間的縱向間隔,單位是畫素。



2

提示:邊框布局管理器並不要求所有區域都必須有元件,如果四周的區域(North、South、East 和 West 區域)沒有元件,則由 Center 區域去補充。如果單個區域中新增的不只一個元件,那麼後來新增的元件將覆蓋原來的元件,所以,區域中只顯示最後新增的一個元件。

如圖範例:注釋了south之後,center就填滿了south原來的位置



1

FlowLayout(流式布局管理器)是 JPanel 和 JApplet 的預設布局管理器。它會將元件按照從上到下、從左到右的放置規律逐行進行定位。與其他布局管理器不同的是,流式布局管理器不限制它所管理元件的大小,而是允許它們有自己的最佳大小。

構造方法1:

FlowLayout():建立一個布局管理器,使用預設的居中對齊方式和預設 5 畫素的水平和垂直間隔。


構造方法2:

FlowLayout(int align):建立一個布局管理器,使用預設 5 畫素的水平和垂直間隔。其中,align 表示元件的對齊方式,對齊的值必須是 FlowLayoutLEFT、FlowLayout.RIGHT 和 FlowLayout.CENTER,指定元件在這一行的位置是居左對齊、居右對齊或居中對齊。


構造方法3:

FlowLayout(int align, int hgap,int vgap):建立一個布局管理器,其中 align 表示元件的對齊方式;hgap 表示元件之間的橫向間隔;vgap 表示元件之間的縱向間隔,單位是畫素。



1

CardLayout(卡片佈局管理器)能夠幫助使用者實現多個成員共用同一個顯示空間,並且一次只顯示一個容器元件的內容
CardLayout 布局管理器將容器分成許多層,每層的顯示空間占據整個容器的大小,但是每層只允許放置一個元件。


構造方法1:

CardLayout():構造一個新布局,預設間隔為 0。


構造方法2:

CardLayout(int hgap, int vgap):建立佈局管理器,並指定元件間的水平間隔(hgap)和垂直間隔(vgap)。



1

GridLayout(網格布局管理器)為元件的放置位置提供了更大的靈活性。它將區域分割成行數(rows)和列數(columns)的網格狀布局,元件按照由左至右、由上而下的次序排列填充到各個單元格中。

構造方法1:

GridLayout(int rows,int cols):建立一個指定行(rows)和列(cols)的網格布局。布局中所有元件的大小一樣,元件之間沒有間隔。


構造方法2:

GridLayout(int rows,int cols,int hgap,int vgap):建立一個指定行(rows)和列(cols)的網格布局,並且可以指定元件之間橫向(hgap)和縱向(vgap)的間隔,單位是畫素。



1

GridBagLayout(網格包布局管理器)是在網格基礎上提供複雜的布局,是最靈活、 最複雜的布局管理器。GridBagLayout 不需要元件的尺寸一致,允許元件擴充套件到多行多列。每個 GridBagLayout 物件都維護了一組動態的矩形網格單元,每個元件占一個或多個單元,所佔有的網格單元稱為元件的顯示區域。

GridBagLayout 所管理的每個元件都與一個 GridBagConstraints 約束類的物件相關。這個約束類物件指定了元件的顯示區域在網格中的位置,以及在其顯示區域中應該如何擺放元件。除了元件的約束物件,GridBagLayout 還要考慮每個元件的最小和首選尺寸,以確定元件的大小。

為了有效地利用網格包布局管理器,在向容器中新增元件時,必須客製化某些元件的相關約束物件。GridBagConstraints 物件的客製化是通過下列變數實現的。

1. gridx 和 gridy

用來指定元件左上角在網格中的行和列。容器中最左邊列的 gridx 為 0,最上邊行的 gridy 為 0。這兩個變數的預設值是 GridBagConstraints.RELATIVE,表示對應的元件將放在前一個元件的右邊或下面。

2. gridwidth 和 gridheight

用來指定元件顯示區域所佔的列數和行數,以網格單元而不是畫素為單位,預設值為 1。

3. fill

指定元件填充網格的方式,可以是如下值:GridBagConstraints.NONE(預設值)、GridBagConstraints.HORIZONTAL(元件橫向充滿顯示區域,但是不改變元件高度)、GridBagConstraints.VERTICAL(元件縱向充滿顯示區域,但是不改變元件寬度)以及 GridBagConstraints.BOTH(元件橫向、縱向充滿其顯示區域)。

4. ipadx 和 ipady

指定元件顯示區域的內部填充,即在元件最小尺寸之外需要附加的畫素數,預設值為 0。

5. insets

指定元件顯示區域的外部填充,即元件與其顯示區域邊緣之間的空間,預設元件沒有外部填充。

6. anchor

指定元件在顯示區域中的擺放位置。可選值有 GridBagConstraints.CENTER(預設值)、GridBagConstraints.NORTH、GridBagConstraints.
NORTHEAST、GridBagConstraints.EAST、GridBagConstraints.SOUTH、GridBagConstraints.SOUTHEAST、GridBagConstraints.WEST、GridBagConstraints.SOUTHWEST 以及 GridBagConstraints.NORTHWEST。

7. weightx 和 weighty

用來指定在容器大小改變時,增加或減少的空間如何在元件間分配,預設值為 0,即所有的元件將聚攏在容器的中心,多餘的空間將放在容器邊緣與網格單元之間。weightx 和 weighty 的取值一般在 0.0 與 1.0 之間,數值大表明元件所在的行或者列將獲得更多的空間。


下面是一個例子:




1

BoxLayout(盒布局管理器)通常和 Box 容器聯合使用,Box 類有以下兩個靜態方法。

createHorizontalBox():返回一個 Box 物件,它採用水平 BoxLayout,即 BoxLayout 沿著水平方向放置元件,讓元件在容器內從左到右排列。

createVerticalBox():返回一個 Box 物件,它採用垂直 BoxLayout,即 BoxLayout 沿著垂直方向放置元件,讓元件在容器內從上到下進行排列。



1



IT145.com E-mail:sddin#qq.com