- Home ›
- Swing ›
- CardLayoutクラス ›
- HERE
カードを切り替えて表示する
他のレイアウトマネージャーでは対象の領域に順次コンポーネントが追加されていくのに対してCardLayoutでは対象の領域には1つのコンポーネントしか配置できません。その代わりコンポーネントを追加した分だけのカードが作成されます。
1度に1枚のカードしか表示されませんので対象の領域には1つのコンポーネントしか表示することはできませんが、カードを切り替えることで表示するコンポーネントを変えることができます。CardLayoutでは表示するカードを切り替えるためのメソッドがいくつか用意されています。
まず先頭のカードを表示する場合です。CardLayoutクラスで用意されている「first」メソッドを使います。
first public void first(Container parent)
コンテナの最初のカードに切り替えます。 パラメータ: parent - 配置が行われる親コンテナ
引数にはCardLayoutを設定しているコンテナ(フレームやパネルなど)のオブジェクトを指定します。
実際の使い方は次のようになります。
JPanel p = new JPanel(); CardLayout layout = new CardLayout(); p.setLayout(layout); layout.last(p);
次は最後のカードを表示する場合です。CardLayoutクラスで用意されている「last」メソッドを使います。
last public void last(Container parent)
コンテナの最後のカードに切り替えます。 パラメータ: parent - 配置が行われる親コンテナ
引数には「last」メソッドの場合と同じくCardLayoutを設定しているコンテナ(フレームやパネルなど)のオブジェクトを指定します。
また現在のカードに対して次のカードを表示したり前のカードを表示したりする場合です。CardLayoutクラスで用意されている「next」メソッドと「previous」メソッドを使います。
next public void next(Container parent)
指定されたコンテナの次のカードに切り替えます。現在表示されているカード が最後のカードである場合、このメソッドはレイアウト内の最初のカードに切 り替えます。 パラメータ: parent - 配置が行われる親コンテナ
previous public void previous(Container parent)
指定されたコンテナの前のカードに切り替えます。現在表示されているカード が最初のカードである場合、このメソッドはレイアウト内の最後のカードに切 り替えます。 パラメータ: parent - 配置が行われる親コンテナ
引数には今までと同じくCardLayoutを設定しているコンテナ(フレームやパネルなど)のオブジェクトを指定します。また最後のカードが表示されている時に「next」メソッドを使うと先頭のカードが表示されます。同じく最初のカードが表示されている時に「previous」メソッドを使うと最後のカードが表示されます。
サンプルプログラム
では簡単なサンプルを作成して試してみます。
import javax.swing.*;
import java.awt.CardLayout;
import java.awt.BorderLayout;
import java.awt.event.*;
public class CardLayoutTest2 extends JFrame implements ActionListener{
JPanel cardPanel;
CardLayout layout;
public static void main(String[] args){
CardLayoutTest2 frame = new CardLayoutTest2();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 300, 200);
frame.setTitle("タイトル");
frame.setVisible(true);
}
CardLayoutTest2(){
/* カード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 firstButton = new JButton("First");
firstButton.addActionListener(this);
firstButton.setActionCommand("First");
JButton prevButton = new JButton("Prev");
prevButton.addActionListener(this);
prevButton.setActionCommand("Prev");
JButton nextButton = new JButton("Next");
nextButton.addActionListener(this);
nextButton.setActionCommand("Next");
JButton lastButton = new JButton("Last");
lastButton.addActionListener(this);
lastButton.setActionCommand("Last");
JPanel btnPanel = new JPanel();
btnPanel.add(firstButton);
btnPanel.add(prevButton);
btnPanel.add(nextButton);
btnPanel.add(lastButton);
getContentPane().add(cardPanel, BorderLayout.CENTER);
getContentPane().add(btnPanel, BorderLayout.PAGE_END);
}
public void actionPerformed(ActionEvent e){
String cmd = e.getActionCommand();
if (cmd.equals("First")){
layout.first(cardPanel);
}else if (cmd.equals("Last")){
layout.last(cardPanel);
}else if (cmd.equals("Next")){
layout.next(cardPanel);
}else if (cmd.equals("Prev")){
layout.previous(cardPanel);
}
}
}
上記をコンパイルした後で実行すると次のように表示されます。
今回は各カードとして登録するものをJPanelクラスのオブジェクトにしました。そしてそれぞれのパネルの上に色々なコンポーネントを配置してあります。
それでは「next」ボタンをクリックして下さい。クリックする毎にカードが切り替わって表示されます。
今回は3枚のカードしか登録していませんので、3枚目を表示している時に「next」ボタンをクリックすると先頭のカードが表示されます。
他にも「First」ボタンをクリックすれば先頭のカードが表示され「Last」ボタンをクリックすれば最後のカードが表示されます。また「Prev」ボタンをクリックすれば1つ前のカードが表示されます。
( Written by Tatsuo Ikura )
JavaDrive