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

クラスJLayeredPane

すべての実装されたインタフェース:
ImageObserver, MenuContainer, Serializable, Accessible
直系の既知のサブクラス:
JDesktopPane

@JavaBean(defaultProperty="accessibleContext")
public class JLayeredPane
extends JComponent
implements Accessible
JLayeredPaneはJFC/Swingコンテナに深さを追加し、コンポーネントが必要に応じて互いにオーバーラップできるようにします。 Integerオブジェクトはコンテナ内での各コンポーネントの深さを表し、番号が大きいほどほかのコンポーネント「の上」に表示されます。 階層化ペインに関するタスク指向のドキュメントおよび使用例は、「The Java Tutorial」の「How to Use a Layered Pane」を参照してください。

例:

次の文は、この図について説明しています。

操作を容易にするため、JLayeredPaneは深さの範囲をいくつかのレイヤーに分割しています。 コンポーネントをこれらのレイヤーのどれかに配置することで、深さを指定する番号を指定することなしに、コンポーネントを適切にオーバーラップさせることができます。
DEFAULT_LAYER
ほとんどのコンポーネントが配置される標準レイヤーです。 最下層のレイヤーとなります。
PALETTE_LAYER
パレット・レイヤーは、デフォルト・レイヤーの上に表示されます。 ドラッグ可能なツールバーやパレットは、ほかのコンポーネントの上に表示されるように、このレイヤーに配置すると便利です。
MODAL_LAYER
モーダル・ダイアログ用のレイヤーです。 モーダル・ダイアログは、コンテナ内のツールバー、パレット、および標準コンポーネントの上に表示されます。
POPUP_LAYER
ポップアップ・レイヤーは、ダイアログの上に表示されます。 このレイヤーにより、コンボボックス、ツールヒント、およびその他のヘルプ・テキストに関連したポップアップ・ウィンドウは、そのポップアップ・ウィンドウを生成したコンポーネント、パレット、またはダイアログの上に表示されます。
DRAG_LAYER
コンポーネントをドラッグする際には、そのコンポーネントをドラッグ・レイヤーに割り当てることによって、コンテナ内のほかのすべてのコンポーネントより上に表示させることができます。 ドラッグが完了したら、そのコンポーネントを元のレイヤーに割当て直すことができます。
JLayeredPaneのメソッドであるmoveToFront(Component)moveToBack(Component)、およびsetPositionを使用することで、レイヤー内でコンポーネントを再配置することができます。 setLayerメソッドを使用すると、コンポーネントの現在のレイヤーを変更することができます。

詳細

JLayeredPaneは、Containerと同じように子のリストを管理しますが、内部で複数のレイヤーを定義することができます。 同じレイヤーに属する子は、通常のContainerオブジェクトとまったく同じように管理されますが、子コンポーネントどうしがオーバーラップした場合には、上位のレイヤーのコンポーネントの方が下位レイヤーのコンポーネントより上に表示されます。

各レイヤーには個別の整数値が割り当てられます。 Componentのレイヤー属性を設定するには、add呼出しでIntegerオブジェクトを渡します。
例:

     layeredPane.add(child, JLayeredPane.DEFAULT_LAYER);
 or
     layeredPane.add(child, Integer.valueOf.valueOf(10));
 
Componentのレイヤー属性を設定するには、
     layeredPaneParent.setLayer(child, 10)
をコンポーネントの親であるJLayeredPane上で呼び出すこともできます。 レイヤーは、子を親に追加する前に設定する必要があります。

番号が大きいレイヤーほど上に表示されます。 したがって、次のように各コンポーネントに個別のレイヤー番号と文字を割り当てることにより、

       5a, 5b, 5c, 2a, 2b, 2c, 1a 
左のコンポーネントほど上に表示されます。

コンポーネントをレイヤー内でいちばん上またはいちばん下に移動させるには、moveToFrontまたはmoveToBackを呼び出します。

レイヤー内でのコンポーネントの位置を位置番号で指定することもできます。 指定できる位置番号は、0から「レイヤー内のコンポーネント数 - 1」です。 -1を指定すると、コンポーネントはいちばん下に表示されます。 0を指定すると、コンポーネントはいちばん上に表示されます。 レイヤー番号とは異なり、値が大きいほど下に表示されます。

ノート: この順序(java.awt.Containerで定義されている)は、レイヤー番号の順序の反対になっています。 通常は、moveToFrontmoveToBack、およびsetLayerを使用します。
add(Component, layer, position)メソッドの使用例を示します。add(5x, 5, -1)呼出しの結果は次のとおりです。
       5a, 5b, 5c, 5x, 2a, 2b, 2c, 1a 
add(5z, 5, 2)呼出しの結果は次のとおりです。
       5a, 5b, 5z, 5c, 5x, 2a, 2b, 2c, 1a 
add(3a, 3, 7)呼出しの結果は次のとおりです。
       5a, 5b, 5z, 5c, 5x, 3a, 2a, 2b, 2c, 1a 
通常のペイント/イベント方式では、1aがいちばん下、5aがいちばん上に表示されます。

ノート: これらのレイヤーは単に論理的な構造であり、LayoutManagerは、レイヤー設定には関係なく、このコンテナのすべての子コンポーネントに影響します。

警告: Swingはスレッドに対して安全ではありません。 詳細は、「Swing's Threading Policy」を参照してください。

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

導入されたバージョン:
1.2
  • フィールド詳細

    • DEFAULT_LAYER

      public static final Integer DEFAULT_LAYER
      デフォルト・レイヤーを定義する簡易オブジェクトです。 Integer.valueOf(0)と同等です。
    • PALETTE_LAYER

      public static final Integer PALETTE_LAYER
      パレット・レイヤーを定義する簡易オブジェクトです。 Integer.valueOf(100)と同等です。
    • DRAG_LAYER

      public static final Integer DRAG_LAYER
      ドラッグ・レイヤーを定義する簡易オブジェクトです。 Integer.valueOf(400)と同等です。
    • FRAME_CONTENT_LAYER

      public static final Integer FRAME_CONTENT_LAYER
      フレーム内容レイヤーを定義する簡易オブジェクトです。 このレイヤーは通常、JFrameのcontentPaneおよびmenuBarコンポーネントを配置するためにのみ使用します。 Integer.valueOf(-30000)と同等です。
      関連項目:
      JFrame
    • LAYER_PROPERTY

      public static final String LAYER_PROPERTY
      バウンド・プロパティです。
      関連項目:
      定数フィールド値
  • コンストラクタの詳細

    • JLayeredPane

      public JLayeredPane()
      新しいJLayeredPaneを作成します。
  • メソッドの詳細

    • remove

      public void remove​(int index)
      このペインからインデックス付きのコンポーネントを削除します。 絶対インデックスであり、レイヤーは無視します。
      オーバーライド:
      remove、クラス: Container
      パラメータ:
      index - 削除するコンポーネントを指定したint値
      関連項目:
      getIndexOf(java.awt.Component)
    • removeAll

      public void removeAll()
      このコンテナからすべてのコンポーネントを削除します。
      オーバーライド:
      removeAll 、クラス:  Container
      導入されたバージョン:
      1.5
      関連項目:
      Container.add(java.awt.Component), Container.remove(int), Container.invalidate()
    • isOptimizedDrawingEnabled

      @BeanProperty(bound=false) public boolean isOptimizedDrawingEnabled()
      ペイン内のコンポーネントがオーバーラップ可能である場合にはfalseを返します。この場合、最適な描画は不可能です。 そうでない場合はtrueを返します。
      オーバーライド:
      isOptimizedDrawingEnabled 、クラス:  JComponent
      戻り値:
      コンポーネントがオーバーラップ可能である場合はfalse、そうでない場合はtrue
      関連項目:
      JComponent.isOptimizedDrawingEnabled()
    • putLayer

      public static void putLayer​(JComponent c, int layer)
      JComponentのレイヤー・プロパティを設定します。 このメソッドは、setLayer()のような副作用(ペイント、追加/削除など)はありません。 通常は、必要な副作用(再ペイントなど)を得るために、インスタンス・メソッドのsetLayer()を使用します。
      パラメータ:
      c - 移動するJComponent
      layer - 移動先のレイヤーを指定するint値
      関連項目:
      setLayer(java.awt.Component, int)
    • getLayer

      public static int getLayer​(JComponent c)
      JComponentのレイヤー・プロパティを返します。このメソッドは、setLayer()のような副作用(ペイント、追加/削除など)はありません。通常は、インスタンス・メソッドのgetLayer()を使用するようにしてください。
      パラメータ:
      c - チェック対象のJComponent
      戻り値:
      コンポーネントのレイヤーを指定するint値
    • getLayeredPaneAbove

      public static JLayeredPane getLayeredPaneAbove​(Component c)
      指定されたコンポーネントを含む最初のJLayeredPaneを返す簡易メソッドです。 すべてのJFrameは、ルートにJLayeredPaneを持つため、JFrameのすべてのコンポーネントはJLayeredPaneを親として持ちます。
      パラメータ:
      c - チェック対象のComponent
      戻り値:
      コンポーネントを含むJLayeredPane。コンポーネント階層にJLayeredPaneが含まれていない場合はnull
      関連項目:
      JFrame, JRootPane
    • setLayer

      public void setLayer​(Component c, int layer)
      指定されたコンポーネントのレイヤー属性を設定し、レイヤー内でいちばん下のコンポーネントとします。 親に追加する前に呼び出す必要があります。
      パラメータ:
      c - レイヤーを設定するComponent
      layer - 設定するレイヤーを指定するint値。値が小さいほど下層
    • setLayer

      public void setLayer​(Component c, int layer, int position)
      指定されたコンポーネントのレイヤー属性と、レイヤー内でのコンポーネントの位置を指定します。
      パラメータ:
      c - レイヤーを設定するComponent
      layer - 設定するレイヤーを指定するint値。値が小さいほど下層
      position - レイヤー内での位置を指定するint値。0がいちばん上、-1がいちばん下
    • getLayer

      public int getLayer​(Component c)
      指定されたComponentのレイヤー属性を返します。
      パラメータ:
      c - チェック対象のComponent
      戻り値:
      コンポーネントの現在のレイヤーを指定するint値
    • getIndexOf

      public int getIndexOf​(Component c)
      指定されたComponentのインデックスを返します。 絶対インデックスであり、レイヤーは無視します。 インデックス番号は、位置番号と同じように、一番上のコンポーネントの番号が0になります。 値が大きいほど一番下に近くなります。
      パラメータ:
      c - チェック対象のComponent
      戻り値:
      コンポーネントのインデックスを指定するint値
    • moveToFront

      public void moveToFront​(Component c)
      コンポーネントを現在のレイヤーでいちばん上(位置0)に移動します。
      パラメータ:
      c - 移動するComponent
      関連項目:
      setPosition(Component, int)
    • moveToBack

      public void moveToBack​(Component c)
      コンポーネントを現在のレイヤーでいちばん下(位置 -1)に移動します。
      パラメータ:
      c - 移動するComponent
      関連項目:
      setPosition(Component, int)
    • setPosition

      public void setPosition​(Component c, int position)
      コンポーネントを現在のレイヤーのpositionに移動します。0がいちばん上、-1がいちばん下です。

      ノート: 位置番号はjava.awt.Containerによって定義されており、レイヤー番号の順序の反対になっています。 位置番号が小さいほど上(0がいちばん上)、大きいほど下になります。

      パラメータ:
      c - 移動するComponent
      position - -1からN-1 (Nは現在のレイヤーのコンポーネント数)の範囲内のint値
    • getPosition

      public int getPosition​(Component c)
      レイヤー内でのコンポーネントの相対位置を返します。
      パラメータ:
      c - チェック対象のComponent
      戻り値:
      コンポーネントの位置を表すint値。0がいちばん上で、最大インデックス値はレイヤー内のコンポーネント数 -1
      関連項目:
      getComponentCountInLayer(int)
    • highestLayer

      public int highestLayer()
      現在のすべての子から最大レイヤー値を返します。 子が存在しない場合には0を返します。
      戻り値:
      ペイン内のいちばん上のコンポーネントのレイヤーを示すint値。子が存在しない場合は0
    • lowestLayer

      public int lowestLayer()
      現在のすべての子から最小レイヤー値を返します。 子が存在しない場合には0を返します。
      戻り値:
      ペイン内のいちばん下のコンポーネントのレイヤーを示すint値。子が存在しない場合は0
    • getComponentCountInLayer

      public int getComponentCountInLayer​(int layer)
      指定されたレイヤーの現在の子の数を返します。
      パラメータ:
      layer - チェックするレイヤーを指定するint値
      戻り値:
      レイヤーのコンポーネント数を指定するint値
    • getComponentsInLayer

      public Component[] getComponentsInLayer​(int layer)
      指定されたレイヤーのコンポーネントの配列を返します。
      パラメータ:
      layer - チェックするレイヤーを指定するint値
      戻り値:
      レイヤーに含まれているComponentの配列
    • paint

      public void paint​(Graphics g)
      指定されたグラフィックス・コンテキストで、このJLayeredPaneをペイントします。
      オーバーライド:
      paint 、クラス:  JComponent
      パラメータ:
      g - ペイント先となるGraphicsコンテキスト
      関連項目:
      JComponent.paintComponent(java.awt.Graphics), JComponent.paintBorder(java.awt.Graphics), JComponent.paintChildren(java.awt.Graphics), JComponent.getComponentGraphics(java.awt.Graphics), JComponent.repaint(long, int, int, int, int)
    • getComponentToLayer

      protected Hashtable<Component,​Integer> getComponentToLayer()
      コンポーネントをレイヤーにマッピングするハッシュ・テーブルを返します。
      戻り値:
      コンポーネントをレイヤーにマッピングするためのハッシュ・テーブル
    • getObjectForLayer

      protected Integer getObjectForLayer​(int layer)
      指定されたレイヤーに関連したIntegerオブジェクトを返します。
      パラメータ:
      layer - レイヤーを指定するint値
      戻り値:
      レイヤーのIntegerオブジェクト
    • insertIndexForLayer

      protected int insertIndexForLayer​(int layer, int position)
      レイヤーおよび位置の要求に従って新しい子を挿入する適切な位置を決定するためのプリミティブ・メソッドです。
      パラメータ:
      layer - レイヤーを指定するint値
      position - レイヤー内の位置を指定するint値
      戻り値:
      (絶対)挿入インデックスを指定するint値
      関連項目:
      getIndexOf(java.awt.Component)
    • paramString

      protected String paramString()
      このJLayeredPaneの文字列表現を返します。 このメソッドはデバッグ専用であり、返される文字列の内容および形式は実装によって異なる可能性があります。 返される文字列は空でもかまいませんが、nullにはできません。
      オーバーライド:
      paramString 、クラス:  JComponent
      戻り値:
      このJLayeredPaneの文字列表現
    • getAccessibleContext

      @BeanProperty(bound=false) public AccessibleContext getAccessibleContext()
      このJLayeredPaneに関連付けられたAccessibleContextを取得します。 階層化ペインの場合、AccessibleContextはAccessibleJLayeredPaneの形式を取ります。 必要に応じて新規のAccessibleJLayeredPaneインスタンスが作成されます。
      定義:
      getAccessibleContext、インタフェース: Accessible
      オーバーライド:
      getAccessibleContext、クラス: Component
      戻り値:
      このJLayeredPaneのAccessibleContextとして機能するAccessibleJLayeredPane