指定したカードを表示する

広告

前頁ではカードの最初と最後以外は前又は後ろに1つずつ移動させて表示していましたが、特定のカードを指定して表示させることも可能です。指定したカードを表示するにはCardLayoutクラスで用意されている「show」メソッドを使います。

addLayoutComponent を使って、指定された name を持つ、このレイアウトに追
加されたコンポーネントに切り替えます。そのようなコンポーネントがない場
合、処理は行われません。

パラメータ:
  parent - 配置が行われる親コンテナ
  name - コンポーネントの名前

1番目の引数にはCardLayoutを設定しているコンテナ(フレームやパネルなど)のオブジェクトを指定します。そして2番目の引数にカードの名前を指定します。カードの名前と言うのはコンテナにコンポーネントを追加する時に使う「add」メソッドの2番目の引数で指定した文字列のことです。

例えば次の例で考えて見ます。

JPanel p = new JPanel();
p.setLayout(new CardLayout());

p.add(new JButton("ボタン1"), "button1");
p.add(new JButton("ボタン2"), "button2");

この場合、2枚のカードが追加されますが最初のカードの名前が「button1」で次のカードの名前が「button2」となります。

実際の使い方は次のようになります。

JPanel p = new JPanel();
CardLayout layout = new CardLayout();
p.setLayout(layout);

p.add(new JButton("ボタン1"), "button1");
p.add(new JButton("ボタン2"), "button2");

layout.show(p, "button1");

サンプルプログラム

では簡単なサンプルを作成して試してみます。

CardLayoutTest3.java

import javax.swing.*;
import java.awt.CardLayout;
import java.awt.BorderLayout;
import java.awt.event.*;

public class CardLayoutTest3 extends JFrame implements ActionListener{

  JPanel cardPanel;
  CardLayout layout;

  public static void main(String[] args){
    CardLayoutTest3 frame = new CardLayoutTest3();

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setBounds(10, 10, 300, 200);
    frame.setTitle("タイトル");
    frame.setVisible(true);
  }

  CardLayoutTest3(){
    /* カード1 */
    JPanel card1 = new JPanel();
    card1.add(new JButton("button"));

    /* カード2 */
    JPanel card2 = new JPanel();
    card2.add(new JLabel("label"));
    card2.add(new JTextField("", 10));

    /* カード3 */
    JPanel card3 = new JPanel();
    card3.add(new JCheckBox("checkbox1"));
    card3.add(new JCheckBox("checkbox2"));

    cardPanel = new JPanel();
    layout = new CardLayout();
    cardPanel.setLayout(layout);

    cardPanel.add(card1, "button");
    cardPanel.add(card2, "label");
    cardPanel.add(card3, "checkbox");

    /* カード移動用ボタン */
    JButton button1 = new JButton("button");
    button1.addActionListener(this);
    button1.setActionCommand("button");

    JButton button2 = new JButton("label");
    button2.addActionListener(this);
    button2.setActionCommand("label");

    JButton button3 = new JButton("checkbox");
    button3.addActionListener(this);
    button3.setActionCommand("checkbox");

    JPanel btnPanel = new JPanel();
    btnPanel.add(button1);
    btnPanel.add(button2);
    btnPanel.add(button3);

    getContentPane().add(cardPanel, BorderLayout.CENTER);
    getContentPane().add(btnPanel, BorderLayout.PAGE_END);
  }

  public void actionPerformed(ActionEvent e){
    String cmd = e.getActionCommand();

    layout.show(cardPanel, cmd);
  }
}

上記をコンパイルした後で実行すると次のように表示されます。

CardLayoutで指定したカードを表示する

画面下のボタンが各カードにそれぞれ対応しています。では「label」ボタンをクリックして下さい。

CardLayoutで指定したカードを表示する

対応するカードが表示されます。

次に「checkbox」ボタンをクリックして下さい。

CardLayoutで指定したカードを表示する

こちらも対応するカードが表示されます。

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)