ロゴ

プログラミング初心者がアプリ開発を目指すブログ

ボタン操作で画面を切り替える-Java CardLayoutの使い方- Javaでデスクトップトップアプリ(予定&ToDo管理)を作る-024

今回はJava Swing CardLayoutをつかって、ボタン操作(その他イベント)で画面を切り替える方法を紹介していきます。

実行イメージは以下のようなものです。

CardLayout実行例1
View1の状態から、、、

CardLayout実行例2
ボタンを押すとView2に切り替わる。

それでは、見ていきましょう。

CardLayoutの基本

CardLayoutクラスを使うことで、1つの領域に複数のコンポーネントを切り替えて表示できます。
CardLayoutを使うにはコンストラクタを使ってCardLayoutオブジェクトを作成する必要があります。

CardLayoutのコンストラクタ
1. CardLayout()
カードレイアウトを間隔0で作成します。
2. CardLayout(int hgap, int vgap)
水平方向および垂直方向の間隔を持ったカードレイアウトを作成します。

オブジェクトをつくった後は、パネルなどのコンテナにカードレイアウトを設定します。


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

次に、カードレイアウトに設定したコンテナに、addメソッドで切り替えたいコンポーネントを追加していきます。
add(コンポーネント,画面を識別する名前)
1番目の引数にコンポーネント、2番目に画面を識別する名前(View1,View2とかを適当に)を指定します。


JPanel view1 = JPanel();//View1用パネル
JPanel view2 = JPanel();//View2用パネル
p.add(view1,"View1");//カードレイアウトを設定したpにview1を追加する
p.add(view2,"View2");

これでカードレイアウトの設定は完了です。
指定した画面に切り替えたいときはCardLayoutクラスのshowメソッドを使います。
layout.show(カードレイアウトを設定したコンポーネント, 画面を識別する名前);

先ほどの例でView2に切り替えたいときは


layout.show(p,"View2");

とします。

ボタンで画面を切り替えたい時は、
setActionCommandでボタンに画面名を登録しておきましょう。(ボタンイベントについてはこちらをチェック)


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

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

/*省略*/

public void actionPerformed(ActionEvent e) {
    // TODO 自動生成されたメソッド・スタブ
    String cmd = e.getActionCommand();
    layout.show(p,cmd);//画面切り替え
  }

それでは最初にあげたサンプルプログラムのコードを見てみましょう。


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

public class Test extends JFrame implements ActionListener{
  JPanel panel;
  CardLayout layout;
  
  public static void main(String[] args) {
    Test frame = new Test();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setBounds(10, 10, 300, 200);
    frame.setTitle("タイトル");
    frame.setVisible(true);
  }
  Test(){
    /* View1 */
    JPanel card1 = new JPanel();
    card1.add(new JLabel("View1"));
    card1.add(new JButton("button"));

    /* View2 */
    JPanel card2 = new JPanel();
    card2.add(new JLabel("View2"));
    card2.add(new JCheckBox("checkbox1"));
    card2.add(new JCheckBox("checkbox2"));
    
    /* CardLayout準備 */
    this.panel = new JPanel();
    this.layout = new CardLayout();//CardLayoutの作成
    this.panel.setLayout(this.layout);
    /* panelにViewを追加 */
    this.panel.add(card1, "View1");
    this.panel.add(card2, "View2");
    
    /* カード移動用ボタン */
    JButton button1 = new JButton("View1");
    button1.addActionListener(this);
    button1.setActionCommand("View1");

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

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

    getContentPane().add(this.panel, BorderLayout.CENTER);
    getContentPane().add(btnPanel, BorderLayout.PAGE_END);
  }
  public void actionPerformed(ActionEvent e) {
    // TODO 自動生成されたメソッド・スタブ
    String cmd = e.getActionCommand();
    layout.show(this.panel,cmd);
  }
}

アプリ開発記の次の記事はこちら => 画面切り替えを実装する-Java CardLayoutの実装- Javaでデスクトップトップアプリ(予定&ToDo管理)を作る-025

スポンサード リンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA