モジュール java.desktop
パッケージ 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オブジェクトで表される各制約は、2つのコンポーネント・エッジ間の垂直方向または水平方向の距離を制御します。 エッジは、コンテナの子またはコンテナ自身に属すことができます。 たとえば、許容されるコンポーネントの幅は、コンポーネントの西(左)のエッジと東(右)のエッジ間の距離を制御する制約を使用して表現できます。 許容されるコンポーネントのy座標は、コンポーネントの北(上端)のエッジとそのコンテナの北のエッジ間の距離の制約によって表現できます。

SpringLayoutによって制御されるコンテナのすべての子は、コンテナ自身と同様に、関連する制約を1セットのみ持ちます。 制約は、SpringLayout.Constraintsオブジェクトによって表現されます。 SpringLayoutがデフォルトで作成する制約では、関連するコンポーネントに、コンポーネントのComponent.getMinimumSize()メソッド、Component.getPreferredSize()メソッドおよびComponent.getMaximumSize()メソッドが返す最小サイズ、推奨サイズおよび最大サイズが設定されます。 xyの位置は初期状態では制約が設定されていないため、Componentの位置は、制約を設定するまで親ContainerInsetsに対して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は、管理するコンポーネントの位置を自動的に設定しません。 SpringLayoutを使用するGUIをハンドコーディングする場合は、西/東および北/南の位置に制約を設定することによって、コンポーネントの位置を初期化してください。

使用する制約によっては、コンテナのサイズを明示的に設定することが必要な場合もあります。


SpringLayoutは単純ですが、ほとんどのレイアウト・マネージャの動作をエミュレートできます。 FlowLayoutの行ブレークのような機能については、Springクラスに専用のサブクラスを作成する必要があります。

SpringLayoutを使用すると、Boxを入れ子にした組合わせでは解決できないような、レイアウトに関する難しい問題も多く解決できます。 SpringLayoutLayoutManager2規約を正確に遵守しているため、他のレイアウト・マネージャを入れ子にできます。これは、他のレイアウト・マネージャに含まれる制約を作成する方法よりも望ましい方法です。

SpringLayoutによるレイアウト・オペレーションの漸近的複雑性は、制約またはコンポーネント、あるいはその両方の数に比例します。

警告: このクラスの直列化されたオブジェクトは、今後のSwingリリースと互換ではなくなる予定です。 現在の直列化のサポートは、短期間の格納や、同じバージョンのSwingを実行するアプリケーション間のRMIに適しています。 1.4では、すべてのJavaBeansの長期ストレージのサポートがjava.beansパッケージに追加されました。 XMLEncoderを参照してください。

導入されたバージョン:
1.4
関連項目: