モジュール java.desktop
パッケージ javax.swing

クラスSpringLayout

  • すべての実装されたインタフェース:
    LayoutManager, LayoutManager2

    public class SpringLayout
    extends Object
    implements LayoutManager2
    SpringLayoutは、関連付けられているコンテナの子を一連の制約に従ってレイアウトします。 SpringLayoutの使用例については、The Java TutorialHow 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
    関連項目:
    Spring, SpringLayout.Constraints
    • フィールドの詳細

      • NORTH

        public static final String NORTH
        コンポーネントの境界の矩形の上端を指定します。
        関連項目:
        定数フィールド値
      • SOUTH

        public static final String SOUTH
        コンポーネントの境界の矩形の下端を指定します。
        関連項目:
        定数フィールド値
      • 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)
        このレイアウト・マネージャはコンポーネントごとの文字列を使用しないため、何もしません。
        定義:
        addLayoutComponent、インタフェース: LayoutManager
        パラメータ:
        name - コンポーネントに関連付けられる文字列
        c - 追加されるコンポーネント
      • removeLayoutComponent

        public void removeLayoutComponent​(Component c)
        指定されたコンポーネントに関連付けれられた制約を削除します。
        定義:
        removeLayoutComponent、インタフェース: LayoutManager
        パラメータ:
        c - コンテナから削除されるコンポーネント
      • addLayoutComponent

        public void addLayoutComponent​(Component component,
                                       Object constraints)
        constraintsSpringLayout.Constraintsのインスタンスである場合は、指定されたコンポーネントに制約を関連付けます。
        定義:
        addLayoutComponent、インタフェース: LayoutManager2
        パラメータ:
        component - 追加するコンポーネント
        constraints - コンポーネントの制約
        関連項目:
        SpringLayout.Constraints
      • getLayoutAlignmentX

        public float getLayoutAlignmentX​(Container p)
        0.5f (中央揃え)を返します。
        定義:
        getLayoutAlignmentX、インタフェース: LayoutManager2
        パラメータ:
        p - ターゲット・コンテナ
        戻り値:
        x軸整列のプリファレンス
      • getLayoutAlignmentY

        public float getLayoutAlignmentY​(Container p)
        0.5f (中央揃え)を返します。
        定義:
        getLayoutAlignmentY、インタフェース: LayoutManager2
        パラメータ:
        p - ターゲット・コンテナ
        戻り値:
        y軸整列のプリファレンス
      • 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 - 依存するエッジ
        c1 - 依存するコンポーネント
        pad - 依存する側とされる側の間の固定距離
        e2 - 依存されるエッジ
        c2 - 依存されるコンポーネント
        関連項目:
        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)の値が変更されると、(e2, c2)sの(スプリング)和をとることによってエッジ(e1, c1)が計算されます。 各エッジに、SpringLayout.NORTHSpringLayout.SOUTHSpringLayout.EASTSpringLayout.WESTSpringLayout.VERTICAL_CENTERSpringLayout.HORIZONTAL_CENTERまたはSpringLayout.BASELINEのいずれかの値が設定されている必要があります。
        パラメータ:
        e1 - 依存するエッジ
        c1 - 依存するコンポーネント
        s - 依存する側と依存される側を接続するスプリング
        e2 - 依存されるエッジ
        c2 - 依存されるコンポーネント
        関連項目:
        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の位置にあるデフォルトの制約オブジェクトを返します。幅と高さはコンポーネントの最小サイズ、最大サイズおよび推奨サイズに制約されます。 メソッドが呼び出された時点でサイズの特性は凍結されませんが、コンポーネントの特性が変更されるとそれを追跡する特性を持つ制約オブジェクトを返します。
        パラメータ:
        c - 返される制約を持つコンポーネント
        戻り値:
        指定されたコンポーネントの制約
      • getConstraint

        public Spring getConstraint​(String edgeName,
                                    Component c)
        コンポーネントの指定されたエッジと親の上端または左端との間の距離を制御するスプリングを返します。 このメソッドは、エッジに対する現在のバインディングを返すのではなく、エッジを後で再度バインドする場合にもエッジの特性を追跡するプロキシを返します。 プロキシは、構築環境での使用を目的としています。構築環境では、ユーザーが任意の順序でレイアウトの制約を定義できるようにすることが便利です。 ただし、プロキシは、レイアウトの制約間の循環的な依存関係を作成する手段を提供します。 そのようなサイクルは、レイアウト・オペレーションがいつでも終了できるように、SpringLayoutによって内部的に検出されます。
        パラメータ:
        edgeName - SpringLayout.NORTHSpringLayout.SOUTHSpringLayout.EASTSpringLayout.WESTSpringLayout.VERTICAL_CENTERSpringLayout.HORIZONTAL_CENTERまたはSpringLayout.BASELINEのいずれか
        c - エッジ・スプリングを要求されるコンポーネント
        戻り値:
        指定されたエッジからその親の上端または左端までの距離を制御するスプリングのプロキシ
        関連項目:
        NORTH, SOUTH, EAST, WEST, VERTICAL_CENTER, HORIZONTAL_CENTER, BASELINE