天天看點

Java Swing的布局管理器一、邊界布局管理器:BorderLayout二、流式布局管理器:FlowLayout三、卡片布局管理器:CardLayout四、網格布局管理器:GridLayout五、網格包布局管理器:GirdBagLayout六、盒式布局管理器:BoxLayout

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

一、邊界布局管理器:BorderLayout

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

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

  • 構造方法1: BorderLayout():建立一個 Border 布局,元件之間沒有間隙。
  • 構造方法2: BorderLayout(int hgap,int vgap):建立一個 Border 布局,其中 hgap

    表示元件之間的橫向間隔;vgap 表示元件之間的縱向間隔,機關是像素。

Java Swing的布局管理器一、邊界布局管理器:BorderLayout二、流式布局管理器:FlowLayout三、卡片布局管理器:CardLayout四、網格布局管理器:GridLayout五、網格包布局管理器:GirdBagLayout六、盒式布局管理器:BoxLayout
Java Swing的布局管理器一、邊界布局管理器:BorderLayout二、流式布局管理器:FlowLayout三、卡片布局管理器:CardLayout四、網格布局管理器:GridLayout五、網格包布局管理器:GirdBagLayout六、盒式布局管理器:BoxLayout

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

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

Java Swing的布局管理器一、邊界布局管理器:BorderLayout二、流式布局管理器:FlowLayout三、卡片布局管理器:CardLayout四、網格布局管理器:GridLayout五、網格包布局管理器:GirdBagLayout六、盒式布局管理器:BoxLayout
Java Swing的布局管理器一、邊界布局管理器:BorderLayout二、流式布局管理器:FlowLayout三、卡片布局管理器:CardLayout四、網格布局管理器:GridLayout五、網格包布局管理器:GirdBagLayout六、盒式布局管理器:BoxLayout

二、流式布局管理器:FlowLayout

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 表示元件之間的縱向間隔,機關是像素。

Java Swing的布局管理器一、邊界布局管理器:BorderLayout二、流式布局管理器:FlowLayout三、卡片布局管理器:CardLayout四、網格布局管理器:GridLayout五、網格包布局管理器:GirdBagLayout六、盒式布局管理器:BoxLayout
Java Swing的布局管理器一、邊界布局管理器:BorderLayout二、流式布局管理器:FlowLayout三、卡片布局管理器:CardLayout四、網格布局管理器:GridLayout五、網格包布局管理器:GirdBagLayout六、盒式布局管理器:BoxLayout

三、卡片布局管理器:CardLayout

CardLayout(卡片布局管理器)能夠幫助使用者實作多個成員共享同一個顯示空間,并且一次隻顯示一個容器元件的内容

CardLayout 布局管理器将容器分成許多層,每層的顯示空間占據整個容器的大小,但是每層隻允許放置一個元件。

  • 構造方法1: CardLayout():構造一個新布局,預設間隔為 0。
  • 構造方法2: CardLayout(int hgap, int

    vgap):建立布局管理器,并指定元件間的水準間隔(hgap)和垂直間隔(vgap)。

Java Swing的布局管理器一、邊界布局管理器:BorderLayout二、流式布局管理器:FlowLayout三、卡片布局管理器:CardLayout四、網格布局管理器:GridLayout五、網格包布局管理器:GirdBagLayout六、盒式布局管理器:BoxLayout

四、網格布局管理器:GridLayout

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)的間隔,機關是像素。

Java Swing的布局管理器一、邊界布局管理器:BorderLayout二、流式布局管理器:FlowLayout三、卡片布局管理器:CardLayout四、網格布局管理器:GridLayout五、網格包布局管理器:GirdBagLayout六、盒式布局管理器:BoxLayout
Java Swing的布局管理器一、邊界布局管理器:BorderLayout二、流式布局管理器:FlowLayout三、卡片布局管理器:CardLayout四、網格布局管理器:GridLayout五、網格包布局管理器:GirdBagLayout六、盒式布局管理器:BoxLayout

五、網格包布局管理器:GirdBagLayout

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 之間,數值大表明元件所在的行或者列将獲得更多的空間。

下面是一個例子:

Java Swing的布局管理器一、邊界布局管理器:BorderLayout二、流式布局管理器:FlowLayout三、卡片布局管理器:CardLayout四、網格布局管理器:GridLayout五、網格包布局管理器:GirdBagLayout六、盒式布局管理器:BoxLayout
Java Swing的布局管理器一、邊界布局管理器:BorderLayout二、流式布局管理器:FlowLayout三、卡片布局管理器:CardLayout四、網格布局管理器:GridLayout五、網格包布局管理器:GirdBagLayout六、盒式布局管理器:BoxLayout
Java Swing的布局管理器一、邊界布局管理器:BorderLayout二、流式布局管理器:FlowLayout三、卡片布局管理器:CardLayout四、網格布局管理器:GridLayout五、網格包布局管理器:GirdBagLayout六、盒式布局管理器:BoxLayout

六、盒式布局管理器:BoxLayout

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

  • createHorizontalBox():傳回一個 Box 對象,它采用水準 BoxLayout,即 BoxLayout

    沿着水準方向放置元件,讓元件在容器内從左到右排列。

  • createVerticalBox():傳回一個 Box 對象,它采用垂直 BoxLayout,即 BoxLayout

    沿着垂直方向放置元件,讓元件在容器内從上到下進行排列。

    Java Swing的布局管理器一、邊界布局管理器:BorderLayout二、流式布局管理器:FlowLayout三、卡片布局管理器:CardLayout四、網格布局管理器:GridLayout五、網格包布局管理器:GirdBagLayout六、盒式布局管理器:BoxLayout
    Java Swing的布局管理器一、邊界布局管理器:BorderLayout二、流式布局管理器:FlowLayout三、卡片布局管理器:CardLayout四、網格布局管理器:GridLayout五、網格包布局管理器:GirdBagLayout六、盒式布局管理器:BoxLayout