public class SpringLayout extends Object implements LayoutManager2
SpringLayout
は、関連付けられているコンテナの子を一連の制約に従ってレイアウトします。SpringLayout
の使用例については、『The Java Tutorial』の「How to Use SpringLayout」を参照してください。
Spring
オブジェクトで表される各制約は、2 つのコンポーネントエッジ間の垂直方向または水平方向の距離を制御します。エッジは、コンテナの子またはコンテナ自身に属すことができます。たとえば、コンポーネントに許される幅は、コンポーネントの west (左) エッジと east (右) エッジ間の距離を制御する制約を使用して表現できます。コンポーネントに許される y 座標は、コンポーネントの north (上端) エッジとコンテナの north エッジ間の距離の制約によって表現できます。
SpringLayout
によって制御されるコンテナのすべての子は、コンテナ自身と同様に、関連する制約を 1 セットだけ持ちます。制約は、SpringLayout.Constraints
オブジェクトによって表現されます。SpringLayout
がデフォルトで作成する制約では、関連するコンポーネントに、コンポーネントの Component.getMinimumSize()
メソッド、Component.getPreferredSize()
メソッド、および Component.getMaximumSize()
メソッドが返す最小サイズ、推奨サイズ、および最大サイズが設定されます。x と y の位置は初期状態では制約が設定されていないため、Component
の位置は、制約を設定するまで親 Container
の Insets
に対して 0,0 となります。
コンポーネントの制約を変更するには複数の方法があります。putConstraint
メソッドのいずれかを使用すると、同一コンテナ内の 2 つのコンポーネントのエッジに接続するスプリングを確立できます。また、getConstraints
メソッドを使用すると、適切な SpringLayout.Constraints
オブジェクトを取得でき、その後 1 つ以上のスプリングを変更できます。getConstraint
メソッドを使用すると、コンポーネントの特定のエッジに対するスプリングを取得でき、その後スプリングを変更できます。Container.add(Component, Object)
を使用すると、コンポーネントをコンテナに追加するときに制約オブジェクトを指定することにより、独自の SpringLayout.Constraints
オブジェクトをコンポーネントに関連付けることができます。
各制約を表す Spring
オブジェクトには、最小値 (minimum 値)、推奨値 (preferred 値)、最大値 (maximum 値)、および現在の値が設定されます。スプリングの現在の値は、最小値と最大値の間にある値で、Spring.sum(javax.swing.Spring, javax.swing.Spring)
メソッドの説明で示される式に従います。最小値、推奨値、および最大値が等しい場合、現在の値も常に等しくなります。このような柔軟性のないスプリングは、柱 (strut) と呼ばれます。ファクトリメソッドの Spring.constant(int)
を使用すると、柱を生成できます。Spring
クラスには、別のスプリングに依存するスプリングなど、その他の種類のスプリングを作成するファクトリメソッドも用意されています。
SpringLayout
では、各エッジの位置は別の 1 つエッジだけの位置に依存します。制約をあとで追加してエッジに新しいバインディングを作成すると、以前のバインディングは破棄され、エッジは 1 つのエッジに依存した状態のまま維持されます。スプリングは、コンテナとその直接の子のエッジ間にだけ接続する必要があります。SpringLayout
の動作は、別のコンテナの内部または外部からコンポーネントのエッジに接続する制約によって表現される場合、定義されません。
注: 多くのレイアウトマネージャーとは異なり、SpringLayout
は、管理するコンポーネントの位置を自動的に設定しません。SpringLayout
を使用する GUI をハンドコーディングする場合は、west/east および north/south の位置に制約を設定することによって、コンポーネントの位置を初期化してください。使用する制約によっては、コンテナのサイズを明示的に設定することが必要な場合もあります。
SpringLayout
は単純ですが、ほとんどのレイアウトマネージャーの動作をエミュレートできます。FlowLayout
の行ブレークのような機能については、Spring
クラスに専用のサブクラスを作成する必要があります。
SpringLayout
を使用すると、Box
を入れ子にした組み合わせでは解決できないような、レイアウトに関する難しい問題も多く解決できます。SpringLayout
は LayoutManager2
規約を正確に遵守しているため、ほかのレイアウトマネージャーを入れ子にできます。これは、ほかのレイアウトマネージャーに含まれる制約を作成する方法よりも望ましい方法です。
SpringLayout
によるレイアウトオペレーションの漸近的複雑性は、制約またはコンポーネント、あるいはその両方の数に比例します。
警告: このクラスの直列化されたオブジェクトは、今後の Swing リリースとの互換性がなくなる予定です。現在の直列化のサポートは、短期間の格納や、同じバージョンの Swing を実行するアプリケーション間の RMI に適しています。1.4 以降、すべての JavaBeansTM 用の長期間の格納サポートが java.beans
パッケージに追加されています。XMLEncoder
を参照してください。
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)
constraints が SpringLayout.Constraints のインスタンスである場合は、指定されたコンポーネントに制約を関連付けます。 |
void |
addLayoutComponent(String name, Component c)
このレイアウトマネージャーはコンポーネントごとの文字列を使用しないため、何もしません。
|
Spring |
getConstraint(String edgeName, Component c)
コンポーネントの指定されたエッジと親の上端または左端との間の距離を制御するスプリングを返します。
|
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)
指定されたコンポーネントに関連付けれられた制約を削除します。
|
public static final String HORIZONTAL_CENTER
public static final String VERTICAL_CENTER
public void addLayoutComponent(String name, Component c)
addLayoutComponent
、インタフェース: LayoutManager
name
- コンポーネントに関連付けられる文字列c
- 追加されるコンポーネントpublic void removeLayoutComponent(Component c)
removeLayoutComponent
、インタフェース: LayoutManager
c
- コンテナから削除されるコンポーネントpublic Dimension minimumLayoutSize(Container parent)
LayoutManager
minimumLayoutSize
、インタフェース: LayoutManager
parent
- 配置されるコンポーネントLayoutManager.preferredLayoutSize(java.awt.Container)
public Dimension preferredLayoutSize(Container parent)
LayoutManager
preferredLayoutSize
、インタフェース: LayoutManager
parent
- 配置されるコンテナLayoutManager.minimumLayoutSize(java.awt.Container)
public Dimension maximumLayoutSize(Container parent)
LayoutManager2
maximumLayoutSize
、インタフェース: LayoutManager2
Component.getMaximumSize()
, LayoutManager
public void addLayoutComponent(Component component, Object constraints)
constraints
が SpringLayout.Constraints
のインスタンスである場合は、指定されたコンポーネントに制約を関連付けます。
addLayoutComponent
、インタフェース: LayoutManager2
component
- 追加するコンポーネントconstraints
- コンポーネントの制約SpringLayout.Constraints
public float getLayoutAlignmentX(Container p)
getLayoutAlignmentX
、インタフェース: LayoutManager2
public float getLayoutAlignmentY(Container p)
getLayoutAlignmentY
、インタフェース: LayoutManager2
public void invalidateLayout(Container p)
LayoutManager2
invalidateLayout
、インタフェース: LayoutManager2
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
- 依存するエッジc1
- 依存するコンポーネントpad
- 依存する側とされる側の間の固定距離e2
- 依存されるエッジc2
- 依存されるコンポーネントputConstraint(String, Component, Spring, String, Component)
public void putConstraint(String e1, Component c1, Spring s, String e2, Component c2)
c1
のエッジ e1
をコンポーネント c2
のエッジ e2
にリンクします。エッジ (e2, c2)
の値が変更されると、(e2, c2)
と s
の (スプリング) sum によってエッジ (e1, c1)
が計算されます。各エッジに、SpringLayout.NORTH
、SpringLayout.SOUTH
、SpringLayout.EAST
、SpringLayout.WEST
、SpringLayout.VERTICAL_CENTER
、SpringLayout.HORIZONTAL_CENTER
、または SpringLayout.BASELINE
のいずれかの値が設定されている必要があります。
e1
- 依存するエッジc1
- 依存するコンポーネントs
- 依存する側と依存される側を接続するスプリングe2
- 依存されるエッジc2
- 依存されるコンポーネントputConstraint(String, Component, int, String, Component)
, NORTH
, SOUTH
, EAST
, WEST
, VERTICAL_CENTER
, HORIZONTAL_CENTER
, BASELINE
public SpringLayout.Constraints getConstraints(Component c)
GridBagLayout
getConstraints
メソッドとは異なり、このメソッドは制約を複製しません。コンポーネントに関連付けられた制約がない場合は、親のインセットに対して 0,0 の位置にあるデフォルトの制約オブジェクトを返します。幅と高さはコンポーネントの最小サイズ、最大サイズ、および推奨サイズに制約されます。メソッドが呼び出された時点でサイズの特性は凍結されませんが、変更されたコンポーネントの特性を追跡する特性を持つ制約オブジェクトを返します。c
- 返される制約を持つコンポーネントpublic Spring getConstraint(String edgeName, Component c)
SpringLayout
によって内部的に検出されます。edgeName
- SpringLayout.NORTH
、SpringLayout.SOUTH
、SpringLayout.EAST
、SpringLayout.WEST
、SpringLayout.VERTICAL_CENTER
、SpringLayout.HORIZONTAL_CENTER
、または SpringLayout.BASELINE
のいずれかc
- エッジスプリングを要求されるコンポーネントNORTH
, SOUTH
, EAST
, WEST
, VERTICAL_CENTER
, HORIZONTAL_CENTER
, BASELINE
public void layoutContainer(Container parent)
LayoutManager
layoutContainer
、インタフェース: LayoutManager
parent
- 配置されるコンテナ バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.