|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object javax.swing.GroupLayout
public class GroupLayout
GroupLayout
是一個 LayoutManager
,它將元件按層次分組,以決定它們在 Container
中的位置。GroupLayout
主要供產生器使用,但也可以手工編碼。分組由 Group
類別的實例來完成。GroupLayout
支持兩種組。串行組 (sequential group) 按順序一個接一個地放置其子元素。並行組 (parallel group) 能夠以四種方式對齊其子元素。
每個組可以包含任意數量的元素,其中元素有 Group
、Component
或間隙 (gap)。間隙可被視為一個具有最小大小、首選大小和最大大小的不可見元件。此外,GroupLayout
還支持其值取自 LayoutStyle
的首選間隙。
元素類似於一個彈簧。每個元素都有一個範圍,由最小大小、首選大小和最大大小指定。間隙的範圍由開發人員指定,或者由 LayoutStyle
確定。Component
的範圍通過 Component
的 getMinimumSize
、getPreferredSize
和 getMaximumSize
方法確定。此外,添加 Component
時,可以指定使用一個特定範圍,而不使用該元件的範圍。Group
的範圍由組的型別確定。ParallelGroup
的範圍是其元素範圍的最大值。SequentialGroup
的範圍是其元素範圍的總和。
GroupLayout
將每個軸 (axis) 單獨對待。也就是說,存在一個表示水平軸的組和一個表示垂直軸的組。水平組負責確定沿水平軸的最小大小、首選大小和最大大小,並設置所包含元件的 x 和寬度。垂直組負責確定沿垂直軸的最小大小、首選大小和最大大小,並設置所包含元件的 y 和高度。每個 Component
都必須同時存在於水平組和垂直組中,否則,在佈局過程中或者在請求最小大小、首選大小或最大大小時,將拋出 IllegalStateException
。
下圖顯示了一個沿水平軸的串行組。該串行組包含三個元件。沿垂直軸使用了一個並行組。
為了強調要單獨對待每個軸,該圖顯示了沿每個軸的每個組和元素的範圍。每個元件的範圍已被投射到軸上,兩個組分別呈現為藍色(水平)和紅色(垂直)。為了便於理解,串行組中的每個元素之間都有一個間隙。
沿水平軸的串行組呈現為藍色實線。注意,串行組是它所包含的子元素的總和。
沿垂直軸,並行組是每個元件高度的最大值。由於三個元件的高度都相同,所以並行組具有相同的高度。
下圖顯示了與上圖中相同的三個元件,但並行組沿水平軸,串行組沿垂直軸。
由於 c1
在三個元件中最大,所以並行組的大小被確定為 c1
。由於 c2
和 c3
小於 c1
,所以將根據為元件指定的對齊方式(如果已指定)或並行組的預設對齊方式將它們對齊。在該圖中,c2
和 c3
是使用 LEADING
的對齊方式創建的。如果元件的方向是從右到左,那麼 c2
和 c3
的位置將在相反的一側對齊(沿右側對齊)。
下圖顯示了沿水平和垂直兩個軸的串行組。
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);
運行程式碼時,將出現下面的視窗。
此佈局由以下部分組成。
Group
的一個 add
方法間接完成此操作。
add
方法返回調用者。這使得調用能很方便地進行連接。例如,group.addComponent(label1).addComponent(label2);
等效於 group.addComponent(label1); group.addComponent(label2);
。
Group
沒有公共建構子;請使用 GroupLayout
的創建方法替代。
巢狀類別摘要 | |
---|---|
static class |
GroupLayout.Alignment
ParallelGroup 能夠對齊其子元素的可能方式的列舉。 |
class |
GroupLayout.Group
Group 為 GroupLayout 所支持的以下兩種操作提供基礎:一個接一個地佈置元件(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 |
欄位詳細資訊 |
---|
public static final int DEFAULT_SIZE
GroupLayout.Group
,
常數欄位值public static final int PREFERRED_SIZE
GroupLayout.Group
,
常數欄位值建構子詳細資訊 |
---|
public GroupLayout(Container host)
Container
創建 GroupLayout
。
host
- Container
,創建的 GroupLayout
將作為其 LayoutManager
IllegalArgumentException
- 如果 host 為 null
方法詳細資訊 |
---|
public void setHonorsVisibility(boolean honorsVisibility)
true
值指示非可見元件不應該被視為佈局的一部分。false
值指示元件應該被確定位置和大小,而不管其可見性如何。
當元件的可見性是動態調整的並且不想更改周圍的元件及其大小時,false
值很有用。
指定的值用於沒有指定明確可見性的元件。
預設值為 true
。
honorsVisibility
- 確定元件的大小和位置時是否要考慮元件的可見性setHonorsVisibility(Component,Boolean)
public boolean getHonorsVisibility()
public void setHonorsVisibility(Component component, Boolean honorsVisibility)
Boolean.TRUE
值指示如果 component
不可見,則它不應該被視為佈局的一部分。false
值指示 component
應該被確定位置和大小,而不管其可見性如何。null
值指示應該使用由單參數方法 setHonorsVisibility
指定的值。
如果 component
不是此 GroupLayout
管理的 Container
的子元件,則它將被添加到 Container
。
component
- 元件honorsVisibility
- 確定大小和位置時是否要考慮 component
的可見性
IllegalArgumentException
- 如果 component
為 null
setHonorsVisibility(Component,Boolean)
public void setAutoCreateGaps(boolean autoCreatePadding)
true
並且向 SequentialGroup
添加了兩個元件,則將自動創建這兩個元件之間的間隙。預設值為 false
。
autoCreatePadding
- 是否自動創建元件之間的間隙public boolean getAutoCreateGaps()
true
。
true
public void setAutoCreateContainerGaps(boolean autoCreateContainerPadding)
false
。
autoCreateContainerPadding
- 是否應該自動創建容器與觸到容器邊框的元件之間的間隙public boolean getAutoCreateContainerGaps()
true
。
true
public void setHorizontalGroup(GroupLayout.Group group)
Group
。
group
- 沿水平軸確定元件位置和大小的 Group
IllegalArgumentException
- 如果 group 為 null
public void setVerticalGroup(GroupLayout.Group group)
Group
。
group
- 沿垂直軸確定元件位置和大小的 Group
IllegalArgumentException
- 如果 group 為 null
public GroupLayout.SequentialGroup createSequentialGroup()
SequentialGroup
。
SequentialGroup
public GroupLayout.ParallelGroup createParallelGroup()
Alignment.LEADING
的對齊方式創建並返回一個 ParallelGroup
。此方法是更常用的 createParallelGroup(Alignment)
方法的覆寫方法。
ParallelGroup
createParallelGroup(Alignment)
public GroupLayout.ParallelGroup createParallelGroup(GroupLayout.Alignment alignment)
ParallelGroup
。此方法是更常用的 createParallelGroup(Alignment,boolean)
方法(其中第二個參數為 true
)的覆寫方法。
alignment
- 組元素的對齊方式
ParallelGroup
IllegalArgumentException
- 如果 alignment
為 null
createBaselineGroup(boolean, boolean)
,
GroupLayout.ParallelGroup
public GroupLayout.ParallelGroup createParallelGroup(GroupLayout.Alignment alignment, boolean resizable)
ParallelGroup
。alignment
參數指定如何確定沒有將組填滿的子元素的位置。例如,如果對齊方式為 TRAILING
的 ParallelGroup
被給定為 100,而一個子元素只需要 50,則將該子元素放置在位置 50(元件方向從左到右)。
只有在沿垂直軸使用時基線對齊方式才有用。使用沿水平軸的基線對齊方式創建的 ParallelGroup
被視為 LEADING
。
有關基線組行為的詳細資訊,請參閱 ParallelGroup
。
alignment
- 組元素的對齊方式resizable
- 如果組是可調整大小的,則返回 true
;如果組是不可調整大小的,則首選大小用於組的最小大小和最大大小。
ParallelGroup
IllegalArgumentException
- 如果 alignment
為 null
createBaselineGroup(boolean, boolean)
,
GroupLayout.ParallelGroup
public GroupLayout.ParallelGroup createBaselineGroup(boolean resizable, boolean anchorBaselineToTop)
ParallelGroup
。
resizable
- 組是否是可調整大小的anchorBaselineToTop
- 基線是固定在組的頂部還是底部createBaselineGroup(boolean, boolean)
,
GroupLayout.ParallelGroup
public void linkSize(Component... components)
可以多次使用此方法來將任意數量的元件強制調整為具有相同的大小。
連接的 Component 是不可調整大小的。
components
- 要具有相同大小的 Component
IllegalArgumentException
- 如果 components
為 null
或包含 null
linkSize(int,Component[])
public void linkSize(int axis, Component... components)
可以多次使用此方法來將任意數量的元件強制調整為具有相同的大小。
連接的 Component
是不可調整大小的。
components
- 要具有相同大小的 Component
axis
- 沿其連接大小的軸;SwingConstants.HORIZONTAL
或 SwingConstans.VERTICAL
之一
IllegalArgumentException
- 如果 components
為 null
或包含 null
;或者 axis
不是 SwingConstants.HORIZONTAL
或 SwingConstants.VERTICAL
public void replace(Component existingComponent, Component newComponent)
existingComponent
- 應該被移除並用 newComponent
來替代的元件newComponent
- 要放入 existingComponent
的位置的元件
IllegalArgumentException
- 如果任一元件為 null
或者 existingComponent
不受此佈局管理器管理public void setLayoutStyle(LayoutStyle layoutStyle)
LayoutStyle
。null
值指示應該使用 LayoutStyle
的共享實例。
layoutStyle
- 要使用的 LayoutStyle
LayoutStyle
public LayoutStyle getLayoutStyle()
LayoutStyle
,用於計算元件之間的首選間隙。此方法返回指定給 setLayoutStyle
的值,可以為 null
。
LayoutStyle
public void addLayoutComponent(String name, Component component)
Component
添加到父容器的通知。不應該直接調用此方法,而應該使用一個 Group
方法來添加 Component
。
LayoutManager
中的 addLayoutComponent
name
- 要與元件關聯的字元串component
- 要添加的 Component
public void removeLayoutComponent(Component component)
Component
的通知。不應該直接調用此方法,而應該調用父 Container
上的 remove
。
LayoutManager
中的 removeLayoutComponent
component
- 要移除的元件Component.remove(java.awt.MenuComponent)
public Dimension preferredLayoutSize(Container parent)
LayoutManager
中的 preferredLayoutSize
parent
- 要返回其首選大小的容器
parent
的首選大小
IllegalArgumentException
- 如果 parent
不是創建此 GroupLayout 的相同 Container
IllegalStateException
- 如果添加到此佈局的任意元件不同時位於水平組和垂直組中Container.getPreferredSize()
public Dimension minimumLayoutSize(Container parent)
LayoutManager
中的 minimumLayoutSize
parent
- 要返回其大小的容器
parent
的最小大小
IllegalArgumentException
- 如果 parent
不是創建此 GroupLayout 的相同 Container
IllegalStateException
- 如果添加到此佈局的任意元件不同時位於水平組和垂直組中Container.getMinimumSize()
public void layoutContainer(Container parent)
LayoutManager
中的 layoutContainer
parent
- 要佈置的容器
IllegalStateException
- 如果添加到此佈局的任意元件不同時位於水平組和垂直組中public void addLayoutComponent(Component component, Object constraints)
Component
添加到父容器的通知。不應該直接調用此方法,而應該使用一個 Group
方法來添加 Component
。
LayoutManager2
中的 addLayoutComponent
component
- 要添加的元件constraints
- 元件放置位置的描述public Dimension maximumLayoutSize(Container parent)
LayoutManager2
中的 maximumLayoutSize
parent
- 要返回其大小的容器
parent
的最大大小
IllegalArgumentException
- 如果 parent
不是創建此 GroupLayout 的相同 Container
IllegalStateException
- 如果添加到此佈局的任意元件不同時位於水平組和垂直組中Container.getMaximumSize()
public float getLayoutAlignmentX(Container parent)
LayoutManager2
中的 getLayoutAlignmentX
parent
- 應用此 LayoutManager
的 Container
0.5
IllegalArgumentException
- 如果 parent
不是創建此 GroupLayout 的相同 Container
public float getLayoutAlignmentY(Container parent)
LayoutManager2
中的 getLayoutAlignmentY
parent
- 應用此 LayoutManager
的 Container
0.5
IllegalArgumentException
- 如果 parent
不是創建此 GroupLayout 的相同 Container
public void invalidateLayout(Container parent)
LayoutManager2
中的 invalidateLayout
parent
- 應用此 LayoutManager 的 Container
IllegalArgumentException
- 如果 parent
不是創建此 GroupLayout 的相同 Container
public String toString()
GroupLayout
的字元串表示形式。此方法僅用於除錯,對於各個實作,所返回字元串的內容和格式可能有所不同。
Object
中的 toString
GroupLayout
的字元串表示形式
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。