レイヤペイン
コンポーネントの層
AWT ではコンポーネントが重なる場合 Z オーダーを保障していましたが
Swing では、この概念を発展させたレイヤペインを軽量コンテナとしてサポートしています
レイヤペインは javax.swing.JLayeredPane クラスで実装されます
java.lang.Object
|
+--java.awt.Component
|
+--java.awt.Container
|
+--javax.swing.JComponent
|
+--javax.swing.JLayeredPane
public class JLayeredPane
extends JComponent implements Accessible
このクラスはデフォルトコンストラクタのみを公開しています
レイヤペインは、コンポーネントの階層が重要なコンテナとして利用することができます
コンポーネントの関係は JLayeredPane.setLayer() メソッドで設定できます
もちろん、階層レベルを取得する JLayeredPane.getLayer() も存在します
public void setLayer(Component c , int layer)
public void setLayer(Component c , int layer , int position)
public int getLayer(Component c)
c にはレイヤーを設定するコンポーネントを、layer にはレイヤ属性を
position は、さらにレイヤ内の位置を指定することができます
例や属性や位置では、値が高いほど上、低いほど下の階層であると解釈されます
position においては、0 が最上部 -1 が最下部を表します
import java.awt.*;
import javax.swing.*;
public class Test extends JApplet {
public void init() {
JLayeredPane layerPane = new JLayeredPane();
layerPane.setLayout(null);
for(int i = 0 , x = 0 , y = 0 ; i < 5 ; i++ , x += 20 , y += 40) {
JButton button = new JButton();
int layer = (int)(Math.random() * (400));
button.setText("レイヤ : " + layer);
button.setBounds(x , y , 200 , 50);
layerPane.add(button);
layerPane.setLayer(button , layer);
}
setContentPane(layerPane);
}
}
このプログラムは、ボタンをレイヤペインに追加しています
このとき、ボタンのレイヤーは乱数で決定し、setLayer() メソッドで指定します