JavaTM 2 Platform
Standard Ed. 6

javax.swing
類別 SpringLayout

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

public class SpringLayout
extends Object
implements LayoutManager2

SpringLayout 根據一組約束佈置其相關容器的子元件。有關使用 SpringLayout 的範例,請參閱 The Java Tutorial 中的 How to Use SpringLayout 一節。

每個由 Spring 物件表示的約束控制著兩個元件邊之間的垂直距離或水平距離。這兩個邊屬於容器的任一子級,或屬於該容器本身。例如,可以使用控制某元件東(右)和西(左)邊之間距離的約束表示該元件允許的寬度。某個元件所允許的 y 坐標可以通過約束該元件北(上)邊和其容器的北邊之間的距離表示。

SpringLayout 控制的容器的每個子級及其容器本身都有一組與其相關的約束。這些約束由一個 SpringLayout.Constraints 物件表示。預設情況下,SpringLayout 創建使其相關元件具有最小、首選和最大大小的約束,這幾項大小都由該元件的 Component.getMinimumSize()Component.getPreferredSize()Component.getMaximumSize() 方法返回。xy 的位置最初不受約束,以便在約束它們之前將該 Component 定位在對應於父 ContainerInsets 的(0,0)位置。

有好幾種可以更改元件約束的方式。可以使用某個 putConstraint 方法建立一個連接同一個容器內兩個元件邊的 spring。或者使用 getConstraints 獲取適當 SpringLayout.Constraints,然後修改其中一個或多個 spring。或者使用 getConstraint 獲取某個元件特定邊的 spring,並修改它。還可以在將某個元件添加到其容器(使用 Container.add(Component, Object))時,通過指定自己的 SpringLayout.Constraints 物件,將該約束對象與該元件相關聯。

表示每項約束的 Spring 物件都有最小、首選、最大和當前值。按照 Spring.sum(javax.swing.Spring, javax.swing.Spring) 方法描述中給定的公式,該 spring 的當前值介於最小值和最大值之間的某個位置。當最小、首選和最大值相同時,當前值始終與它們相等;此不靈活的 spring 被稱作 strut。可以使用處理器方法 Spring.constant(int) 創建 strut。該 Spring 類別還提供處理器方法,用於創建其他種類別的 spring,包括依賴其他 spring 的 spring。

SpringLayout 中,每個邊的位置只與其他一個邊的位置有關。如果隨後添加一個約束來創建某個邊的新綁定,則以前的綁定會被丟棄,且該邊保持與某單個邊相關。Spring 只應在容器的兩個邊及其直接子級之間連接;當出現連接到不同容器(內部或外部)中元件邊緣的約束時,該 SpringLayout 的行為是不確定的。

SpringLayout 與其他佈局管理器的比較


註:與多數佈局管理器不同,SpringLayout 不自動設置它管理的元件的位置。如果手工編寫一個使用 SpringLayout 的 GUI,則要記住通過約束東/西和南/北的位置初始化元件的位置。

可能還需要明確設置容器的大小,具體取決於您使用的約束。


儘管 SpringLayout 簡單易用,但它還要倣傚其他多數佈局管理器的行為。對於某些功能(如 FlowLayout 提供的行斷開),需要創建一個 Spring 類別的專用子類別。

SpringLayout 還提供解決許多困難佈局問題的方法,這些問題都不能通過巢狀 Box 的組合來解決。也就是說,SpringLayout 完全遵守 LayoutManager2 協定,因此可以使用其他佈局管理器進行巢狀(一種創建其他佈局管理器使用的約束的更好技術)。

SpringLayout 佈局操作的漸進複雜性與約束(和/或元件)的數量呈線關係。

警告:此類別的序列化物件與以後的 Swing 版本不相容。當前序列化支持適用於短期存儲,或適用於在運行相同 Swing 版本的應用程序之間進行 RMI(Remote Method Invocation,遠端方法調用)。從 1.4 版本開始,已在 java.beans 套件中添加了支持所有 JavaBeansTM 長期存儲的功能。請參見 XMLEncoder

從以下版本開始:
1.4
另請參見:
Spring, SpringLayout.Constraints

巢狀類別摘要
static class SpringLayout.Constraints
          Constraints 物件將管理元件大小和位置更改方式的約束存儲在 SpringLayout 控制的容器中。
 
欄位摘要
static String BASELINE
          指定元件的基線。
static String EAST
          指定元件的邊界矩形的右邊。
static String HEIGHT
          指定元件邊界矩形的高度。
static String HORIZONTAL_CENTER
          指定元件邊界矩形的水平中央位置。
static String NORTH
          指定元件的邊界矩形的頂邊。
static String SOUTH
          指定元件的邊界矩形的底邊。
static String VERTICAL_CENTER
          指定元件的邊界矩形的垂直中央位置。
static String WEST
          指定元件的邊界矩形的左邊。
static String WIDTH
          指定元件邊界矩形的寬度。
 
建構子摘要
SpringLayout()
          建構一個新 SpringLayout
 
方法摘要
 void addLayoutComponent(Component component, Object constraints)
          如果 constraintsSpringLayout.Constraints 的一個實例,則將該約束與指定元件相關聯。
 void addLayoutComponent(String name, Component c)
          無效,因為此佈局管理器不使用每元件字元串。
 Spring getConstraint(String edgeName, Component c)
          返回控制該元件指定邊及其父級的頂邊或左邊之間距離的 spring。
 SpringLayout.Constraints getConstraints(Component c)
          返回指定元件的約束。
 float getLayoutAlignmentX(Container p)
          返回 0.5f(居中)。
 float getLayoutAlignmentY(Container p)
          返回 0.5f(居中)。
 void invalidateLayout(Container p)
          使佈局失效,指示如果佈局管理器快取記憶體了資訊,則應該將其丟棄。
 void layoutContainer(Container parent)
          佈置指定容器。
 Dimension maximumLayoutSize(Container parent)
          給定指定容器的元件,計算該容器的最大大小維數。
 Dimension minimumLayoutSize(Container parent)
          給定指定容器所包含的元件,計算該容器的最小大小維數。
 Dimension preferredLayoutSize(Container parent)
          給定指定容器所包含的元件,計算該容器的首選大小維數。
 void putConstraint(String e1, Component c1, int pad, String e2, Component c2)
          將元件 c1 的邊 e1 連接到元件 c2 的邊 e2,邊與邊之間的距離固定。
 void putConstraint(String e1, Component c1, Spring s, String e2, Component c2)
          將元件 c1 的邊 e1 連接到元件 c2 的邊 e2
 void removeLayoutComponent(Component c)
          移除與指定元件相關的約束。
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

欄位詳細資訊

NORTH

public static final String NORTH
指定元件的邊界矩形的頂邊。

另請參見:
常數欄位值

SOUTH

public static final String SOUTH
指定元件的邊界矩形的底邊。

另請參見:
常數欄位值

EAST

public static final String EAST
指定元件的邊界矩形的右邊。

另請參見:
常數欄位值

WEST

public static final String WEST
指定元件的邊界矩形的左邊。

另請參見:
常數欄位值

HORIZONTAL_CENTER

public static final String HORIZONTAL_CENTER
指定元件邊界矩形的水平中央位置。

從以下版本開始:
1.6
另請參見:
常數欄位值

VERTICAL_CENTER

public static final String VERTICAL_CENTER
指定元件的邊界矩形的垂直中央位置。

從以下版本開始:
1.6
另請參見:
常數欄位值

BASELINE

public static final String BASELINE
指定元件的基線。

從以下版本開始:
1.6
另請參見:
常數欄位值

WIDTH

public static final String WIDTH
指定元件邊界矩形的寬度。

從以下版本開始:
1.6
另請參見:
常數欄位值

HEIGHT

public static final String HEIGHT
指定元件邊界矩形的高度。

從以下版本開始:
1.6
另請參見:
常數欄位值
建構子詳細資訊

SpringLayout

public SpringLayout()
建構一個新 SpringLayout

方法詳細資訊

addLayoutComponent

public void addLayoutComponent(String name,
                               Component c)
無效,因為此佈局管理器不使用每元件字元串。

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

removeLayoutComponent

public void removeLayoutComponent(Component c)
移除與指定元件相關的約束。

指定者:
介面 LayoutManager 中的 removeLayoutComponent
參數:
c - 將從容器中移除的元件

minimumLayoutSize

public Dimension minimumLayoutSize(Container parent)
從介面 LayoutManager 複製的描述
給定指定容器所包含的元件,計算該容器的最小大小維數。

指定者:
介面 LayoutManager 中的 minimumLayoutSize
參數:
parent - 要佈置的元件

preferredLayoutSize

public Dimension preferredLayoutSize(Container parent)
從介面 LayoutManager 複製的描述
給定指定容器所包含的元件,計算該容器的首選大小維數。

指定者:
介面 LayoutManager 中的 preferredLayoutSize
參數:
parent - 要佈置的容器
另請參見:
LayoutManager.minimumLayoutSize(java.awt.Container)

maximumLayoutSize

public Dimension maximumLayoutSize(Container parent)
從介面 LayoutManager2 複製的描述
給定指定容器的元件,計算該容器的最大大小維數。

指定者:
介面 LayoutManager2 中的 maximumLayoutSize
另請參見:
Component.getMaximumSize(), LayoutManager

addLayoutComponent

public void addLayoutComponent(Component component,
                               Object constraints)
如果 constraintsSpringLayout.Constraints 的一個實例,則將該約束與指定元件相關聯。

指定者:
介面 LayoutManager2 中的 addLayoutComponent
參數:
component - 正添加的元件
constraints - 該元件的約束
另請參見:
SpringLayout.Constraints

getLayoutAlignmentX

public float getLayoutAlignmentX(Container p)
返回 0.5f(居中)。

指定者:
介面 LayoutManager2 中的 getLayoutAlignmentX

getLayoutAlignmentY

public float getLayoutAlignmentY(Container p)
返回 0.5f(居中)。

指定者:
介面 LayoutManager2 中的 getLayoutAlignmentY

invalidateLayout

public void invalidateLayout(Container p)
從介面 LayoutManager2 複製的描述
使佈局失效,指示如果佈局管理器快取記憶體了資訊,則應該將其丟棄。

指定者:
介面 LayoutManager2 中的 invalidateLayout

putConstraint

public void putConstraint(String e1,
                          Component c1,
                          int pad,
                          String e2,
                          Component c2)
將元件 c1 的邊 e1 連接到元件 c2 的邊 e2,邊與邊之間的距離固定。此約束將導致賦值
     value(e1, c1) = value(e2, c2) + pad
在以後的所有佈局操作期間發生。

參數:
e1 - 該 dependent 的邊
c1 - 該 dependent 的元件
pad - dependent 和 anchor 之間的固定距離
e2 - 該 anchor 的邊
c2 - 該 anchor 的元件
另請參見:
putConstraint(String, Component, Spring, String, Component)

putConstraint

public void putConstraint(String e1,
                          Component c1,
                          Spring s,
                          String e2,
                          Component c2)
將元件 c1 的邊 e1 連接到元件 c2 的邊 e2。因為邊 (e2, c2) 會使值發生變化,所以邊 (e1, c1) 將使用 (e2, c2)s 的 (spring) 總和計算。每個邊必須具有以下某個值:SpringLayout.NORTHSpringLayout.SOUTHSpringLayout.EASTSpringLayout.WESTSpringLayout.VERTICAL_CENTERSpringLayout.HORIZONTAL_CENTERSpringLayout.BASELINE

參數:
e1 - 該 dependent 的邊
c1 - 該 dependent 的元件
s - 連接 dependent 和 anchor 的 spring
e2 - 該 anchor 的邊
c2 - 該 anchor 的元件
另請參見:
putConstraint(String, Component, int, String, Component), NORTH, SOUTH, EAST, WEST, VERTICAL_CENTER, HORIZONTAL_CENTER, BASELINE

getConstraints

public SpringLayout.Constraints getConstraints(Component c)
返回指定元件的約束。注意,與 GridBagLayout getConstraints 方法不同,此方法不複製約束。如果沒有與此元件相關的約束,則此方法返回一個位置在 0,0 的預設約束物件,此位置相對於父級的 Insets 及其受該元件的最小、最大和首選大小約束的寬度/高度。該大小特徵不會在調用此方法時凍結;相反,此方法會返回一個約束物件,其特徵會隨著該元件特徵的更改而進行追蹤。

參數:
c - 將返回其約束的元件
返回:
指定元件的約束

getConstraint

public Spring getConstraint(String edgeName,
                            Component c)
返回控制該元件指定邊及其父級的頂邊或左邊之間距離的 spring。此方法返回一個追蹤該邊特徵的代理,而不是返回該邊當前綁定,即使該邊隨後反彈也一樣。代理特別適用於產生器環境,在此環境中能夠使使用者以任意順序定義佈局約束。不過,代理確實會提供在佈局約束之間創建週期依賴關係的方法。SpringLayout 將對此類別週期進行內部檢測,以使佈局操作始終終止。

參數:
edgeName - 必須是以下值之一:SpringLayout.NORTHSpringLayout.SOUTHSpringLayout.EASTSpringLayout.WESTSpringLayout.VERTICAL_CENTERSpringLayout.HORIZONTAL_CENTERSpringLayout.BASELINE
c - 需要其邊緣 spring 的元件
返回:
一個控制指定邊及其父級的頂邊或左邊之間距離的 spring 代理
另請參見:
NORTH, SOUTH, EAST, WEST, VERTICAL_CENTER, HORIZONTAL_CENTER, BASELINE

layoutContainer

public void layoutContainer(Container parent)
從介面 LayoutManager 複製的描述
佈置指定容器。

指定者:
介面 LayoutManager 中的 layoutContainer
參數:
parent - 要佈置的容器

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

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