whichのブログ ~プログラミング体験記~ -11ページ目

whichのブログ ~プログラミング体験記~

主にJava,vVsual C#,Andoroid,SQLについて
覚え基本た文法やプログラミング技法、各クラスの利用法を
忘れないように形にしたものです

初心者だとかプロだとか特に意識せず利用してもらえるとうれしいです。

■CardLayoutクラス
今回でいよいよ最後のレイアウトマネージャーです(正確にはAndroidになるともう数個増える)
このレイアウトは画面を1枚のカードとみなして複数の画面を管理することができ、画面遷移系のメソッドによる画面切り替えができるという特徴があります
わかりやすくいうならインストーラーのようなアプリケーションに用いられます
なので一般的ではないがいままでののような配置を意識する用途でつかうレイアウトマネージャーではありません

コンストラクタ: new CardLayout();
CardLayoutオブジェクトの生成
メソッド
メソッド名説明
first(panel)最初に登録された画面に移動
previous(panel)1つ前の画面に移動
next(panel)次の画面に移動する
last(panel)最後に登録された画面に移動する
4つとも引数に「panel」という変数が記述してますが、「JPanel panel = new JPanel(new CardLayout() );」という定義です

■サンプルプログラム
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GUICard extends JFrame implements ActionListener{
CardLayout card;
JPanel panel;
public static void main(String [] agr) {
JFrame f = new GUICard();
f.setVisible(true);
}
public GUICard(){
setTitle("CardLayout");
setSize(400,150);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
card = new CardLayout();
JPanel cmd = new JPanel();
panel = new JPanel();
JPanel p1,p2,p3;
/*1枚目*/
p1 = new JPanel();
JButton btn = new JButton("実行");
p1.add(btn,BorderLayout.WEST);
/*2枚目*/
p2 = new JPanel();
btn = new JButton("背景の変更");
p2.add(btn);
/*3枚目*/
p3 = new JPanel();
JLabel label = new JLabel("選択したチェック項目:");
p3.add(label);
JCheckBox jc = new JCheckBox("車");
p3.add(jc);
jc = new JCheckBox("船");
p3.add(jc);
jc = new JCheckBox("飛行機");
p3.add(jc);
panel.setLayout(card);
panel.add(p1, "pane1");
panel.add(p2,"pane2");
panel.add(p3,"box");
/*共通*/
btn = new JButton("First");
    btn.addActionListener(this);
btn.setActionCommand("First");
cmd.add(btn);
    btn = new JButton("Prev");
    btn.addActionListener(this);
    btn.setActionCommand("Prev");
cmd.add(btn);
    btn = new JButton("Next");
    btn.addActionListener(this);
    btn.setActionCommand("Next");
cmd.add(btn);
    btn = new JButton("Last");
    btn.addActionListener(this);
    btn.setActionCommand("Last");
cmd.add(btn);
cmd.add(panel);
this.add(panel,BorderLayout.NORTH);
this.add(cmd,BorderLayout.CENTER);
}
public void actionPerformed(ActionEvent e){
    String str = e.getActionCommand();
switch(str){
case "First" : card.first(panel);
break;
case "Prev" : card.previous(panel);
break;
case "Next" : card.next(panel);
break;
case "Last" : card.last(panel);
break;
}
}
}
実行結果

       

 (左)2枚目のカードレイアウト          (右)最初のレイアウト                     (真ん中)最後のレイアウト

最初に真ん中の画面が表示され下の4つボタンをクリックすることで3つの画面を行き来できます
今回はあえて画面遷移用ボタン以外にはイベント処理を実装していません。

これでGUIプログラミングの要素「GUI部品」、「レイアウトマネージャ」、「イベント処理」の3つうち「レイアウトマネージャ」が完了しました

今後のスケージュールとしては
ボタンやラベルのような超基本部品⇒イベント処理⇒チェックボックスやラジオボタンのような複数の部品を連動させる部品⇒swingオリジナル部品
でしょか