コンテナ内にコンポーネントを配置する |
次のアプレットで、CardLayout が動作する様子を示す。使用中のブラウザは 1.0 Java アプレットを実行することができない。したがってここではプログラムが起動するウィンドウの画像を示す。
上記のアプレットからわかるように、CardLayout クラスは同じ表示スペースを共有する 2 つ以上のコンポーネント (通常は Panel インスタンス) の管理を支援するものである。CardLayout が管理する各コンポーネントは概念上、積み重ねられたトランプに似ており、常に一番上のカードしか見えない。どのカードを見えるようにするかは、以下に示す方法で選ぶことができる。
以下に、CardLayout とそれが管理するコンポーネントを作成するコードを示す。 (プログラム全体も参照できる。 このプログラムは、AppletButton を利用してアプレットの中で動作するか、またはアプリケーションとして動作する。)
CardLayout が管理するコンテナにコンポーネントを追加するときは、Container の//インスタンス変数を宣言する: Panel cards; final static String BUTTONPANEL = "Panel with Buttons"; final static String TEXTPANEL = "Panel with TextField"; //コンテナを初期化する: cards = new Panel(); cards.setLayout(new CardLayout()); ...//p1 という名前の Panel を作成し、そこにボタンを入れる。 ...//p2 という名前の Panel を作成し、そこにテキストフィールドを入れる。 cards.add(BUTTONPANEL, p1); cards.add(TEXTPANEL, p2);
add()
メソッドの引数 2 個の書式を使用しなければならない。この書式は add(String name, Component comp)
である。 最初の引数には、追加するコンポーネントを何らかの形で識別する任意の文字列を指定する。
CardLayout に表示させるコンポーネントを選ぶには、コードを若干追加する必要がある。 このページのアプレットのコードは以下のようになっている。
上記の例からわかるように、CardLayout の//コンテナを初期化する: . . . //見た目をよくするために Choice を Panel に入れる。 Panel cp = new Panel(); Choice c = new Choice(); c.addItem(BUTTONPANEL); c.addItem(TEXTPANEL); cp.add(c); add("North", cp); . . . public boolean action(Event evt, Object arg) { if (evt.target instanceof Choice) { ((CardLayout)cards.getLayout()).show(cards,(String)arg); return true; } return false; }
show()
メソッドを使用して、現在表示されるコンポーネントを設定することができる。show()
メソッドの最初の引数は CardLayout が制御するコンテナ、つまり、 CardLayout が管理するコンポーネントのコンテナである。2 番目の引数は、表示するコンポーネントを特定する文字列である。この文字列は、そのコンポーネントをコンテナに追加したときに使った文字列と同じである。
以下は、コンポーネントを選び出すための CardLayout メソッドのすべてである。どのメソッドでも、最初の引数は CardLayout がレイアウトマネージャとなっているコンテナ(CardLayout が制御するカードのコンテナ)である。
public void first(Container parent) public void next(Container parent) public void previous(Container parent) public void last(Container parent) public void show(Container parent, String name)
コンテナ内にコンポーネントを配置する |