指定したカードを表示する
前頁ではカードの最初と最後以外は前又は後ろに1つずつ移動させて表示していましたが、特定のカードを指定して表示させることも可能です。指定したカードを表示するにはCardLayoutクラスで用意されている「show」メソッドを使います。
public void show(Container parent, String name)
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");
サンプルプログラム
では簡単なサンプルを作成して試してみます。
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);
}
}
上記をコンパイルした後で実行すると次のように表示されます。
画面下のボタンが各カードにそれぞれ対応しています。では「label」ボタンをクリックして下さい。
対応するカードが表示されます。
次に「checkbox」ボタンをクリックして下さい。
こちらも対応するカードが表示されます。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。