タイトル
TOPJavaSwingLayoutManager → This Page

CardLayout@Swing LayoutManagerサンプル

概要

Java - Swing - LayoutManager - CardLayout のサンプルです。
CardLayout は同領域に複数コンポーネントを重ねてセットする場合に使います。
トランプのように表示するカードをめくって切り替えていくようなイメージです。

コンストラクタ

コンストラクタ説明引数引数説明
CardLayout() 隙間を空けずに
CardLayout を作成
- -
CardLayout(int hgap, int vgap) 隙間を空けた
CardLayout を作成
hgap 水平方向間隔
vgap 垂直方向間隔


解説

サンプルを実行すると以下の図のようになります。
サンプル画像

各カードは add(コンポーネント, カード名) で追加し、
CardLayout クラスの以下のメソッドで切り替えます。
メソッドメソッド説明
first コンテナの最初のカードに切り替え
previous コンテナの前のカードに切り替え
next コンテナの次のカードに切り替え
last コンテナの最後のカードに切り替え
show 指定の名前のカードに切り替え


サンプルソース

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

/**
 * LayoutManager サンプル03
 * ・CardLayout
 * ・隙間を設定
 * ・カードの切り替え
 * ・指定カードの切り替え
 * 
 * @author みっちー
 */
public class LayoutManager03 extends JFrame implements ActionListener {
	
	private JPanel panelBase = null;
	private CardLayout layout = null;
	
	/**
	 * 開始メソッド
	 * 
	 * @param args	パラメータ
	 */
	public static void main(String[] args){
		LayoutManager03 frame = new LayoutManager03();
		
		// 閉じるボタンをクリックされた場合の動作を設定
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		// ウインドウのタイトルを設定
		frame.setTitle("LayoutManager サンプル03[CardLayout]");
		
		// フレームの X座標、Y座標、幅、高さを設定
		frame.setBounds(100, 200, 500, 150);
		
		// フレームを表示(これをしないと透明のフレームが立ち上がってしまう)
		frame.setVisible(true);
	}
	
	/**
	 * コンストラクタ
	 */
	public LayoutManager03() {
		// ベースとなるパネルを[CardLayout]として作成
		panelBase = new JPanel();
		// 隙間を設定
		layout = new CardLayout(10, 10);
		panelBase.setLayout(layout);
		
		// パネル1
		JPanel panel1 = new JPanel();
		panel1.add(new JLabel("パネル1"));
		
		// パネル2
		JPanel panel2 = new JPanel();
		panel2.add(new JLabel("パネル2"));
		
		// パネル3
		JPanel panel3 = new JPanel();
		panel3.add(new JLabel("パネル3"));
		
		// パネル4
		JPanel panel4 = new JPanel();
		panel4.add(new JLabel("パネル4"));
		
		// パネルを追加
		panelBase.add(panel1, "1");
		panelBase.add(panel2, "2");
		panelBase.add(panel3, "3");
		panelBase.add(panel4, "4");
		
		// ボタンを作成(カードをめくるボタン)
		// アクションの詳細は JButton のサンプルを参照して下さい
		JButton buttonFirst = new JButton("First");
		buttonFirst.addActionListener(this);
		buttonFirst.setActionCommand("First");
		
		JButton buttonPrevious = new JButton("Previous");
		buttonPrevious.addActionListener(this);
		buttonPrevious.setActionCommand("Previous");
		
		JButton buttonNext = new JButton("Next");
		buttonNext.addActionListener(this);
		buttonNext.setActionCommand("Next");
		
		JButton buttonLast = new JButton("Last");
		buttonLast.addActionListener(this);
		buttonLast.setActionCommand("Last");
		
		JButton button3 = new JButton("3");
		button3.addActionListener(this);
		button3.setActionCommand("3");
		
		// ボタンを追加
		JPanel panelButton = new JPanel();
		panelButton.add(buttonFirst);
		panelButton.add(buttonPrevious);
		panelButton.add(buttonNext);
		panelButton.add(buttonLast);
		panelButton.add(button3);
		
		
		// パネルを追加
		getContentPane().add(panelBase, BorderLayout.CENTER);
		getContentPane().add(panelButton, BorderLayout.SOUTH);
	}
	
	/**
	 * アクション
	 * 詳細は JButton のサンプルを参照してね
	 */
	public void actionPerformed(ActionEvent e){
		String cmd = e.getActionCommand();
		if (cmd.equals("First")){
			// 最初のカード
			layout.first(panelBase);
		}else if (cmd.equals("Last")){
			// 前ののカード
			layout.last(panelBase);
		}else if (cmd.equals("Next")){
			// 次のカード
			layout.next(panelBase);
		}else if (cmd.equals("Previous")){
			// 最後のカード
			layout.previous(panelBase);
		}else if (cmd.equals("3")){
			// "3"のカード
			layout.show(panelBase, "3");
		}
	}
}

サンプルソースのダウンロード

ソースのダウンロード(Eclipse用のプロジェクトファイルも同梱)

更新履歴

2016/05/13 Windows 8.1 + Java 7 環境で全体を見直し
2007/12/07 新規作成


TOPJavaSwingLayoutManager → This Page