JavaTM 2 Platform
Standard Ed. 6

javax.swing
類別 GroupLayout

java.lang.Object
  繼承者 javax.swing.GroupLayout
所有已實作的介面:
LayoutManager, LayoutManager2

public class GroupLayout
extends Object
implements LayoutManager2

GroupLayout 是一個 LayoutManager,它將元件按層次分組,以決定它們在 Container 中的位置。GroupLayout 主要供產生器使用,但也可以手工編碼。分組由 Group 類別的實例來完成。GroupLayout 支持兩種組。串行組 (sequential group) 按順序一個接一個地放置其子元素。並行組 (parallel group) 能夠以四種方式對齊其子元素。

每個組可以包含任意數量的元素,其中元素有 GroupComponent 或間隙 (gap)。間隙可被視為一個具有最小大小、首選大小和最大大小的不可見元件。此外,GroupLayout 還支持其值取自 LayoutStyle 的首選間隙。

元素類似於一個彈簧。每個元素都有一個範圍,由最小大小、首選大小和最大大小指定。間隙的範圍由開發人員指定,或者由 LayoutStyle 確定。Component 的範圍通過 ComponentgetMinimumSizegetPreferredSizegetMaximumSize 方法確定。此外,添加 Component 時,可以指定使用一個特定範圍,而不使用該元件的範圍。Group 的範圍由組的型別確定。ParallelGroup 的範圍是其元素範圍的最大值。SequentialGroup 的範圍是其元素範圍的總和。

GroupLayout 將每個軸 (axis) 單獨對待。也就是說,存在一個表示水平軸的組和一個表示垂直軸的組。水平組負責確定沿水平軸的最小大小、首選大小和最大大小,並設置所包含元件的 x 和寬度。垂直組負責確定沿垂直軸的最小大小、首選大小和最大大小,並設置所包含元件的 y 和高度。每個 Component 都必須同時存在於水平組和垂直組中,否則,在佈局過程中或者在請求最小大小、首選大小或最大大小時,將拋出 IllegalStateException

下圖顯示了一個沿水平軸的串行組。該串行組包含三個元件。沿垂直軸使用了一個並行組。

為了強調要單獨對待每個軸,該圖顯示了沿每個軸的每個組和元素的範圍。每個元件的範圍已被投射到軸上,兩個組分別呈現為藍色(水平)和紅色(垂直)。為了便於理解,串行組中的每個元素之間都有一個間隙。

沿水平軸的串行組呈現為藍色實線。注意,串行組是它所包含的子元素的總和。

沿垂直軸,並行組是每個元件高度的最大值。由於三個元件的高度都相同,所以並行組具有相同的高度。

下圖顯示了與上圖中相同的三個元件,但並行組沿水平軸,串行組沿垂直軸。

由於 c1 在三個元件中最大,所以並行組的大小被確定為 c1。由於 c2c3 小於 c1,所以將根據為元件指定的對齊方式(如果已指定)或並行組的預設對齊方式將它們對齊。在該圖中,c2c3 是使用 LEADING 的對齊方式創建的。如果元件的方向是從右到左,那麼 c2c3 的位置將在相反的一側對齊(沿右側對齊)。

下圖顯示了沿水平和垂直兩個軸的串行組。

GroupLayout 提供在 Component 之間插入間隙的能力。間隙的大小由 LayoutStyle 的實例確定。可以使用 setAutoCreateGaps 方法進行此操作。類似地,可以使用 setAutoCreateContainerGaps 方法在觸到父容器邊緣的元件和容器之間插入間隙。

以下程式碼建構了一個面板,該面板由兩列構成,第一列中有兩個標籤,第二列中有兩個文本欄位:

JComponent panel = ...;
GroupLayout layout = new GroupLayout(panel);
panel.setLayout(layout);
 
// Turn on automatically adding gaps between components
layout.setAutoCreateGaps(true);
 
// Turn on automatically creating gaps between components that touch
// the edge of the container and the container.
layout.setAutoCreateContainerGaps(true);
 
// Create a sequential group for the horizontal axis.
 
GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup();
 
// The sequential group in turn contains two parallel groups.
// One parallel group contains the labels, the other the text fields.
// Putting the labels in a parallel group along the horizontal axis
// positions them at the same x location.
   //
// Variable indentation is used to reinforce the level of grouping.
hGroup.addGroup(layout.createParallelGroup().
addComponent(label1).addComponent(label2));
hGroup.addGroup(layout.createParallelGroup().
addComponent(tf1).addComponent(tf2));
layout.setHorizontalGroup(hGroup);
   
// Create a sequential group for the vertical axis.
GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup();
 
// The sequential group contains two parallel groups that align
// the contents along the baseline.The first parallel group contains
// the first label and text field, and the second parallel group contains
// the second label and text field.By using a sequential group
// the labels and text fields are positioned vertically after one another.
vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
addComponent(label1).addComponent(tf1));
vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
addComponent(label2).addComponent(tf2));
layout.setVerticalGroup(vGroup);
 

運行程式碼時,將出現下面的視窗。

此佈局由以下部分組成。

在這段程式碼中,要注意幾個問題:

從以下版本開始:
1.6

巢狀類別摘要
static class GroupLayout.Alignment
          ParallelGroup 能夠對齊其子元素的可能方式的列舉。
 class GroupLayout.Group
          GroupGroupLayout 所支持的以下兩種操作提供基礎:一個接一個地佈置元件(SequentialGroup)或對齊元件(ParallelGroup)。
 class GroupLayout.ParallelGroup
          一個 Group,它對齊其子元素並確定其大小。
 class GroupLayout.SequentialGroup
          一個 Group,它按順序一個接一個地確定其元素的位置和大小。
 
欄位摘要
static int DEFAULT_SIZE
          指示元件或間隙的大小應該用於特定的範圍值。
static int PREFERRED_SIZE
          指示元件或間隙的首選大小應該用於特定的範圍值。
 
建構子摘要
GroupLayout(Container host)
          為指定的 Container 創建 GroupLayout
 
方法摘要
 void addLayoutComponent(Component component, Object constraints)
          已將 Component 添加到父容器的通知。
 void addLayoutComponent(String name, Component component)
          已將 Component 添加到父容器的通知。
 GroupLayout.ParallelGroup createBaselineGroup(boolean resizable, boolean anchorBaselineToTop)
          創建並返回一個沿基線對齊其元素的 ParallelGroup
 GroupLayout.ParallelGroup createParallelGroup()
          使用 Alignment.LEADING 的對齊方式創建並返回一個 ParallelGroup
 GroupLayout.ParallelGroup createParallelGroup(GroupLayout.Alignment alignment)
          使用指定的對齊方式創建並返回一個 ParallelGroup
 GroupLayout.ParallelGroup createParallelGroup(GroupLayout.Alignment alignment, boolean resizable)
          使用指定的對齊方式和調整大小行為創建並返回一個 ParallelGroup
 GroupLayout.SequentialGroup createSequentialGroup()
          創建並返回一個 SequentialGroup
 boolean getAutoCreateContainerGaps()
          如果自動創建容器與觸到容器邊框的元件之間的間隙,則返回 true
 boolean getAutoCreateGaps()
          如果自動創建元件之間的間隙,則返回 true
 boolean getHonorsVisibility()
          返回確定元件的大小和位置時是否要考慮元件的可見性。
 float getLayoutAlignmentX(Container parent)
          返回沿 x 軸的對齊方式。
 float getLayoutAlignmentY(Container parent)
          返回沿 y 軸的對齊方式。
 LayoutStyle getLayoutStyle()
          返回 LayoutStyle,用於計算元件之間的首選間隙。
 void invalidateLayout(Container parent)
          使佈局失效,指示如果佈局管理器快取記憶體了資訊,則應該將其丟棄。
 void layoutContainer(Container parent)
          佈置指定的容器。
 void linkSize(Component... components)
          將指定元件強制調整為具有相同的大小,而不管其首選大小、最小大小或最大大小如何。
 void linkSize(int axis, Component... components)
          將指定元件強制調整為沿指定軸具有相同的大小,而不管其首選大小、最小大小或最大大小如何。
 Dimension maximumLayoutSize(Container parent)
          返回指定容器的最大大小。
 Dimension minimumLayoutSize(Container parent)
          返回指定容器的最小大小。
 Dimension preferredLayoutSize(Container parent)
          返回指定容器的首選大小。
 void removeLayoutComponent(Component component)
          已從父容器中移除 Component 的通知。
 void replace(Component existingComponent, Component newComponent)
          使用新的元件替代現有元件。
 void setAutoCreateContainerGaps(boolean autoCreateContainerPadding)
          設置是否應該自動創建容器與觸到容器邊框的元件之間的間隙。
 void setAutoCreateGaps(boolean autoCreatePadding)
          設置是否將自動創建元件之間的間隙。
 void setHonorsVisibility(boolean honorsVisibility)
          設置確定元件的大小和位置時是否要考慮元件的可見性。
 void setHonorsVisibility(Component component, Boolean honorsVisibility)
          設置確定元件的大小和位置時是否要考慮元件的可見性。
 void setHorizontalGroup(GroupLayout.Group group)
          設置沿水平軸確定元件位置和大小的 Group
 void setLayoutStyle(LayoutStyle layoutStyle)
          設置用於計算元件之間首選間隙的 LayoutStyle
 void setVerticalGroup(GroupLayout.Group group)
          設置沿垂直軸確定元件位置和大小的 Group
 String toString()
          返回此 GroupLayout 的字元串表示形式。
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

欄位詳細資訊

DEFAULT_SIZE

public static final int DEFAULT_SIZE
指示元件或間隙的大小應該用於特定的範圍值。

另請參見:
GroupLayout.Group, 常數欄位值

PREFERRED_SIZE

public static final int PREFERRED_SIZE
指示元件或間隙的首選大小應該用於特定的範圍值。

另請參見:
GroupLayout.Group, 常數欄位值
建構子詳細資訊

GroupLayout

public GroupLayout(Container host)
為指定的 Container 創建 GroupLayout

參數:
host - Container,創建的 GroupLayout 將作為其 LayoutManager
拋出:
IllegalArgumentException - 如果 host 為 null
方法詳細資訊

setHonorsVisibility

public void setHonorsVisibility(boolean honorsVisibility)
設置確定元件的大小和位置時是否要考慮元件的可見性。true 值指示非可見元件不應該被視為佈局的一部分。false 值指示元件應該被確定位置和大小,而不管其可見性如何。

當元件的可見性是動態調整的並且不想更改周圍的元件及其大小時,false 值很有用。

指定的值用於沒有指定明確可見性的元件。

預設值為 true

參數:
honorsVisibility - 確定元件的大小和位置時是否要考慮元件的可見性
另請參見:
setHonorsVisibility(Component,Boolean)

getHonorsVisibility

public boolean getHonorsVisibility()
返回確定元件的大小和位置時是否要考慮元件的可見性。

返回:
確定元件的大小和位置時是否要考慮元件的可見性

setHonorsVisibility

public void setHonorsVisibility(Component component,
                                Boolean honorsVisibility)
設置確定元件的大小和位置時是否要考慮元件的可見性。Boolean.TRUE 值指示如果 component 不可見,則它不應該被視為佈局的一部分。false 值指示 component 應該被確定位置和大小,而不管其可見性如何。null 值指示應該使用由單參數方法 setHonorsVisibility 指定的值。

如果 component 不是此 GroupLayout 管理的 Container 的子元件,則它將被添加到 Container

參數:
component - 元件
honorsVisibility - 確定大小和位置時是否要考慮 component 的可見性
拋出:
IllegalArgumentException - 如果 componentnull
另請參見:
setHonorsVisibility(Component,Boolean)

setAutoCreateGaps

public void setAutoCreateGaps(boolean autoCreatePadding)
設置是否將自動創建元件之間的間隙。例如,如果設為 true 並且向 SequentialGroup 添加了兩個元件,則將自動創建這兩個元件之間的間隙。預設值為 false

參數:
autoCreatePadding - 是否自動創建元件之間的間隙

getAutoCreateGaps

public boolean getAutoCreateGaps()
如果自動創建元件之間的間隙,則返回 true

返回:
如果自動創建元件之間的間隙,則返回 true

setAutoCreateContainerGaps

public void setAutoCreateContainerGaps(boolean autoCreateContainerPadding)
設置是否應該自動創建容器與觸到容器邊框的元件之間的間隙。預設值為 false

參數:
autoCreateContainerPadding - 是否應該自動創建容器與觸到容器邊框的元件之間的間隙

getAutoCreateContainerGaps

public boolean getAutoCreateContainerGaps()
如果自動創建容器與觸到容器邊框的元件之間的間隙,則返回 true

返回:
如果自動創建容器與觸到容器邊框的元件之間的間隙,則返回 true

setHorizontalGroup

public void setHorizontalGroup(GroupLayout.Group group)
設置沿水平軸確定元件位置和大小的 Group

參數:
group - 沿水平軸確定元件位置和大小的 Group
拋出:
IllegalArgumentException - 如果 group 為 null

setVerticalGroup

public void setVerticalGroup(GroupLayout.Group group)
設置沿垂直軸確定元件位置和大小的 Group

參數:
group - 沿垂直軸確定元件位置和大小的 Group
拋出:
IllegalArgumentException - 如果 group 為 null

createSequentialGroup

public GroupLayout.SequentialGroup createSequentialGroup()
創建並返回一個 SequentialGroup

返回:
一個新的 SequentialGroup

createParallelGroup

public GroupLayout.ParallelGroup createParallelGroup()
使用 Alignment.LEADING 的對齊方式創建並返回一個 ParallelGroup。此方法是更常用的 createParallelGroup(Alignment) 方法的覆寫方法。

返回:
一個新的 ParallelGroup
另請參見:
createParallelGroup(Alignment)

createParallelGroup

public GroupLayout.ParallelGroup createParallelGroup(GroupLayout.Alignment alignment)
使用指定的對齊方式創建並返回一個 ParallelGroup。此方法是更常用的 createParallelGroup(Alignment,boolean) 方法(其中第二個參數為 true)的覆寫方法。

參數:
alignment - 組元素的對齊方式
返回:
一個新的 ParallelGroup
拋出:
IllegalArgumentException - 如果 alignmentnull
另請參見:
createBaselineGroup(boolean, boolean), GroupLayout.ParallelGroup

createParallelGroup

public GroupLayout.ParallelGroup createParallelGroup(GroupLayout.Alignment alignment,
                                                     boolean resizable)
使用指定的對齊方式和調整大小行為創建並返回一個 ParallelGroupalignment 參數指定如何確定沒有將組填滿的子元素的位置。例如,如果對齊方式為 TRAILINGParallelGroup 被給定為 100,而一個子元素只需要 50,則將該子元素放置在位置 50(元件方向從左到右)。

只有在沿垂直軸使用時基線對齊方式才有用。使用沿水平軸的基線對齊方式創建的 ParallelGroup 被視為 LEADING

有關基線組行為的詳細資訊,請參閱 ParallelGroup

參數:
alignment - 組元素的對齊方式
resizable - 如果組是可調整大小的,則返回 true;如果組是不可調整大小的,則首選大小用於組的最小大小和最大大小。
返回:
一個新的 ParallelGroup
拋出:
IllegalArgumentException - 如果 alignmentnull
另請參見:
createBaselineGroup(boolean, boolean), GroupLayout.ParallelGroup

createBaselineGroup

public GroupLayout.ParallelGroup createBaselineGroup(boolean resizable,
                                                     boolean anchorBaselineToTop)
創建並返回一個沿基線對齊其元素的 ParallelGroup

參數:
resizable - 組是否是可調整大小的
anchorBaselineToTop - 基線是固定在組的頂部還是底部
另請參見:
createBaselineGroup(boolean, boolean), GroupLayout.ParallelGroup

linkSize

public void linkSize(Component... components)
將指定元件強制調整為具有相同的大小,而不管其首選大小、最小大小或最大大小如何。將所有連接元件首選大小中的最大值賦予連接的元件。例如,如果將首選寬度分別為 10 和 20 的兩個元件連接起來,則兩個元件的寬度都將變為 20。

可以多次使用此方法來將任意數量的元件強制調整為具有相同的大小。

連接的 Component 是不可調整大小的。

參數:
components - 要具有相同大小的 Component
拋出:
IllegalArgumentException - 如果 componentsnull 或包含 null
另請參見:
linkSize(int,Component[])

linkSize

public void linkSize(int axis,
                     Component... components)
將指定元件強制調整為沿指定軸具有相同的大小,而不管其首選大小、最小大小或最大大小如何。將所有連接元件首選大小中的最大值賦予連接的元件。例如,如果沿水平軸將首選寬度分別為 10 和 20 的兩個元件連接起來,則兩個元件的寬度都將變為 20。

可以多次使用此方法來將任意數量的元件強制調整為具有相同的大小。

連接的 Component 是不可調整大小的。

參數:
components - 要具有相同大小的 Component
axis - 沿其連接大小的軸;SwingConstants.HORIZONTALSwingConstans.VERTICAL 之一
拋出:
IllegalArgumentException - 如果 componentsnull 或包含 null;或者 axis 不是 SwingConstants.HORIZONTALSwingConstants.VERTICAL

replace

public void replace(Component existingComponent,
                    Component newComponent)
使用新的元件替代現有元件。

參數:
existingComponent - 應該被移除並用 newComponent 來替代的元件
newComponent - 要放入 existingComponent 的位置的元件
拋出:
IllegalArgumentException - 如果任一元件為 null 或者 existingComponent 不受此佈局管理器管理

setLayoutStyle

public void setLayoutStyle(LayoutStyle layoutStyle)
設置用於計算元件之間首選間隙的 LayoutStylenull 值指示應該使用 LayoutStyle 的共享實例。

參數:
layoutStyle - 要使用的 LayoutStyle
另請參見:
LayoutStyle

getLayoutStyle

public LayoutStyle getLayoutStyle()
返回 LayoutStyle,用於計算元件之間的首選間隙。此方法返回指定給 setLayoutStyle 的值,可以為 null

返回:
用於計算元件之間首選間隙的 LayoutStyle

addLayoutComponent

public void addLayoutComponent(String name,
                               Component component)
已將 Component 添加到父容器的通知。不應該直接調用此方法,而應該使用一個 Group 方法來添加 Component

指定者:
介面 LayoutManager 中的 addLayoutComponent
參數:
name - 要與元件關聯的字元串
component - 要添加的 Component

removeLayoutComponent

public void removeLayoutComponent(Component component)
已從父容器中移除 Component 的通知。不應該直接調用此方法,而應該調用父 Container 上的 remove

指定者:
介面 LayoutManager 中的 removeLayoutComponent
參數:
component - 要移除的元件
另請參見:
Component.remove(java.awt.MenuComponent)

preferredLayoutSize

public Dimension preferredLayoutSize(Container parent)
返回指定容器的首選大小。

指定者:
介面 LayoutManager 中的 preferredLayoutSize
參數:
parent - 要返回其首選大小的容器
返回:
parent 的首選大小
拋出:
IllegalArgumentException - 如果 parent 不是創建此 GroupLayout 的相同 Container
IllegalStateException - 如果添加到此佈局的任意元件不同時位於水平組和垂直組中
另請參見:
Container.getPreferredSize()

minimumLayoutSize

public Dimension minimumLayoutSize(Container parent)
返回指定容器的最小大小。

指定者:
介面 LayoutManager 中的 minimumLayoutSize
參數:
parent - 要返回其大小的容器
返回:
parent 的最小大小
拋出:
IllegalArgumentException - 如果 parent 不是創建此 GroupLayout 的相同 Container
IllegalStateException - 如果添加到此佈局的任意元件不同時位於水平組和垂直組中
另請參見:
Container.getMinimumSize()

layoutContainer

public void layoutContainer(Container parent)
佈置指定的容器。

指定者:
介面 LayoutManager 中的 layoutContainer
參數:
parent - 要佈置的容器
拋出:
IllegalStateException - 如果添加到此佈局的任意元件不同時位於水平組和垂直組中

addLayoutComponent

public void addLayoutComponent(Component component,
                               Object constraints)
已將 Component 添加到父容器的通知。不應該直接調用此方法,而應該使用一個 Group 方法來添加 Component

指定者:
介面 LayoutManager2 中的 addLayoutComponent
參數:
component - 要添加的元件
constraints - 元件放置位置的描述

maximumLayoutSize

public Dimension maximumLayoutSize(Container parent)
返回指定容器的最大大小。

指定者:
介面 LayoutManager2 中的 maximumLayoutSize
參數:
parent - 要返回其大小的容器
返回:
parent 的最大大小
拋出:
IllegalArgumentException - 如果 parent 不是創建此 GroupLayout 的相同 Container
IllegalStateException - 如果添加到此佈局的任意元件不同時位於水平組和垂直組中
另請參見:
Container.getMaximumSize()

getLayoutAlignmentX

public float getLayoutAlignmentX(Container parent)
返回沿 x 軸的對齊方式。此方法指出如何相對於其他元件對齊該元件。該值應該是 0 到 1 之間的一個數,其中 0 表示沿原點對齊,1 表示在距原點最遠的地方對齊,0.5 表示居中等等。

指定者:
介面 LayoutManager2 中的 getLayoutAlignmentX
參數:
parent - 應用此 LayoutManagerContainer
返回:
對齊方式;此實作返回 0.5
拋出:
IllegalArgumentException - 如果 parent 不是創建此 GroupLayout 的相同 Container

getLayoutAlignmentY

public float getLayoutAlignmentY(Container parent)
返回沿 y 軸的對齊方式。此方法指出如何相對於其他元件對齊該元件。該值應該是 0 到 1 之間的一個數,其中 0 表示沿原點對齊,1 表示在距原點最遠的地方對齊,0.5 表示居中等等。

指定者:
介面 LayoutManager2 中的 getLayoutAlignmentY
參數:
parent - 應用此 LayoutManagerContainer
返回:
對齊方式;此實作返回 0.5
拋出:
IllegalArgumentException - 如果 parent 不是創建此 GroupLayout 的相同 Container

invalidateLayout

public void invalidateLayout(Container parent)
使佈局失效,指示如果佈局管理器快取記憶體了資訊,則應該將其丟棄。

指定者:
介面 LayoutManager2 中的 invalidateLayout
參數:
parent - 應用此 LayoutManager 的 Container
拋出:
IllegalArgumentException - 如果 parent 不是創建此 GroupLayout 的相同 Container

toString

public String toString()
返回此 GroupLayout 的字元串表示形式。此方法僅用於除錯,對於各個實作,所返回字元串的內容和格式可能有所不同。

覆寫:
類別 Object 中的 toString
返回:
GroupLayout 的字元串表示形式

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only