10. Checkbox/RadioButton

選択用のコンポーネントを紹介します。ここでは基本的な使い方のみ紹介します。そのほかのコンストラクタやメソッド、フィールドについては APIドキュメントを参照してください。

(1) CheckBox は複数選択

 アンケートなどで、「このサイトをどこで知りましたか?(複数選択)」というような質問があります。このとき、ブラウザにはチェックを付けるための四角がでてきます。これがチェックボックスです。チェックボックスは複数個の選択をすることができます。

 チェックボックスは java.awt.Checkbox クラスを使います。コンストラクタの引数には表示したいラベルを指定します。
Checkbox cb1 = new Checkbox("赤");
Checkbox cb2 = new Checkbox("青");
Checkbox cb3 = new Checkbox("黄");


 チェックボックスの状態を調べたり、ラベルを調べるには次のメソッドを使います。

boolean getState()
チェックされていれば true、チェックされていなければ false を返す

void setState(boolean state)
チェックボックスの選択状態を設定します

String getLabel()
チェックボックスについているラベルを返します

 チェックボックスでは、チェックしたときに ItemEvent が発生します。新登場のイベントですが、ActionEvent とイベント処理の方法は同じです。

イベントの種類 チェックしたとき ItemEvent 発生
イベント処理用メソッド ItemListener インタフェース内に定義されている
void itemStateChanged(ItemEvent e)
リスナ登録用メソッド void addItemListener(ItemListener obj)


  CheckboxTest.java

// CheckboxTest.java

import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;

public class CheckboxTest extends Applet implements ItemListener {
    Checkbox cb[];

    public void init() {

        // コンポーネント作成
        cb = new Checkbox[3];        // Checkbox型で配列の領域確保
        cb[0] = new Checkbox("赤");    // オブジェクト生成
        cb[1] = new Checkbox("青");
        cb[2] = new Checkbox("黄");
        
        // レイアウト設定
        setLayout(new FlowLayout());

        // コンポーネント追加
        add(cb[0]);
        add(cb[1]);
        add(cb[2]);

        // リスナ登録 
        cb[0].addItemListener(this);
        cb[1].addItemListener(this);
        cb[2].addItemListener(this);
    }

    public void itemStateChanged(ItemEvent e) {
        for (int i=0;i<cb.length;i++) {
            if ( cb[i].getState() ) {
                // Checkbox クラスの getLabel() でラベルを獲得します
                System.out.print( cb[i].getLabel()+" " );
            }
        }
        System.out.println("を選択しました");
    }
}


  CheckboxTest.html

<APPLET CODE=CheckboxTest.class width=200 height=100>
</APPLET>


実行例 (画像をクリックすると実際のアプレットが起動します)





 この例題では、チェックするたびに現在チェックされているものを MS-DOS プロンプト(又は Java コンソール)に表示します。


(2) ラジオボタンの代用

 「日本の首都はどこでしょう? 東京、大阪、名古屋から選びなさい」という3択問題があったとき、チェックボックスを使って画面を作ってしまうと、複数選択できてしまいます。このように、あるグループから1つだけを選択させたい場合はラジオボタンを使います。

 しかし、RadioButton というクラスはありません ( JRadioButton というクラスはありますが別の機会に説明します)。では、どうするのかというと先ほどと同じ java.awt.Checkbox クラスを使います。

 ですが、今度はチェックボックスをグループにまとめなければならないので、Checkbox クラスのコンストラクタで以下の形式を使います。
Checkbox(String label, boolean state, CheckboxGroup group)

 3番目の引数にある CheckboxGroup というクラスがグループ化するためのものです。CheckboxGroup クラスは java.awt パッケージのクラスです。グループを作るには

CheckboxGroup group1 = new CheckboxGroup();

 のように作ります。これを Checkbox クラスのコンストラクタに指定すると、チェックボックスをグループ化する事ができます。

 チェックの状態やイベント処理については Checkbox と全く同じです。

  RadioTest.java

// RadioTest.java

import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;

public class RadioTest extends Applet implements ItemListener {
    Checkbox cb[];

    public void init() {
        // グループ作成
        CheckboxGroup cbg = new CheckboxGroup();

        // コンポーネント作成
        cb = new Checkbox[3];        // Checkbox型で配列の領域確保
        cb[0] = new Checkbox("赤",true,cbg);    // オブジェクト生成
        cb[1] = new Checkbox("青",false,cbg);
        cb[2] = new Checkbox("黄",false,cbg);
        
        // レイアウト設定
        setLayout(new FlowLayout());

        // コンポーネント追加
        add(cb[0]);
        add(cb[1]);
        add(cb[2]);

        // リスナ登録 
        cb[0].addItemListener(this);
        cb[1].addItemListener(this);
        cb[2].addItemListener(this);
    }

    public void itemStateChanged(ItemEvent e) {
        Checkbox obj = (Checkbox)e.getSource();
        String color = obj.getLabel();

        // setBackground()で背景色変更
        if ( color.equals("赤") ) setBackground(Color.red);
        if ( color.equals("青") ) setBackground(Color.blue);
        if ( color.equals("黄") ) setBackground(Color.yellow);
    }
}


  RadioTest.html

<APPLET CODE=RadioTest.class width=300 height=200>
</APPLET>


 実行例 (画像をクリックすると実際のアプレットが起動します)



CheckboxGroup を null としてチェックボックスオブジェクトをつくれば、はじめに紹介したチェックボックスになります。

前の章(9.TextField/TextArea)   次の章(11.Choice / List)