チェックボックス
ブール値を得る
GUIで、ユーザーに選択や設定を要求する場合
YESかNOのような、二者択一の場合はチェックボックスが使われます
チェックボックスを生成するにはjava.awt.Checkboxクラスを使用します
このクラスのコンストラクタは次のとおりです
public Checkbox()
public Checkbox( String label )
public Checkbox( String label, boolean state )
public Checkbox( String label, boolean state, CheckboxGroup group )
public Checkbox( String label, CheckboxGroup group, boolean state )
パラメータに何も指定しなかった場合は空のラベルのチェックボックスを生成します
labelには、チェックボックスのラベルを指定します
stateには、チェックボックスの初期状態を指定することができます
stateがtrueの場合、初期状態でチェックボックスにチェックマークがついています
CheckboxGroupクラスは、チェックボックスの排他制御を行うためのものです
このチェックボックスに関しては、後記します
チェックボックスのイベントはaddItemListener()メソッドで登録します
public synchronized void addItemListener( ItemListener lis )
lisには、登録するリスナを指定します
ここで指定するjava.awt.event.ItemListenerインターフェイスは
次のメソッドを宣言しています
public abstract void itemStateChanged( ItemEvent e )
チェックボックスを押すと、このイベントが呼び出されます
パラメータで受け取るjava.awt.event.ItemEventクラスは
非常に重要な役割を果たしますが、このクラスについては後ほど紹介します
今は、単純なチェックボックスの生成方法を考えましょう
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
/* <applet code="App31.class" width="300"height="300">
</applet>
*/
public class App31 extends Applet implements ItemListener {
public void init() {
setBackground(Color.white);
Checkbox ch = (Checkbox)add(new Checkbox("red"));
ch.addItemListener(this);
}
public void itemStateChanged(ItemEvent e) {
setBackground(Color.red);
}
}
プログラムの内容は、これまでと同様なので問題はないと思います
ItemListenerをインプリメントし、add()によってコンテナに追加しています
しかし、このままでは個々のチェックボックスの詳細がわかりません
チェックボックスがチェックされているのかそうでないのかがわからなければ
チェックボックスとしての機能を果たすことができませんね
チェックボックスの状態をitemStateChanged()内で得るには
ItemEvenクラスのgetItemSelectable()メソッドを使用します
public ItemSelectable getItemSelectable()
このメソッドが返すのはjava.awt.ItemSelectableインターフェイスです
このインタフェイスはCheckboxクラスがインプリメントしているので、キャストすることができます
Checkboxクラスのメソッドで、チェックボックスのラベルや状態を得るメソッドがあります
ラベルを得るにはgetLabel()メソッドを
状態を得るにはgetState()メソッドを使用します
public String getLabel()
public boolean getState()
getLabel()メソッドは、チェックボックスのラベルを返します
getState()メソッドは、チェックボックスがチェックされていればtrueを
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
/* <applet code="App32.class" width="300"height="300">
</applet>
*/
public class App32 extends Applet implements ItemListener {
Checkbox ch[] = new Checkbox[2];
Label l;
public void init() {
setBackground(Color.white);
ch[0] = (Checkbox)add(new Checkbox("SAKURA"));
ch[1] = (Checkbox)add(new Checkbox("TOMOYO"));
ch[0].addItemListener(this);
ch[1].addItemListener(this);
l = (Label)add(new Label("Card Captor Sakura☆"));
}
public void itemStateChanged(ItemEvent e) {
Checkbox ch = (Checkbox)e.getItemSelectable();
l.setText(ch.getLabel() + " : " + ch.getState());
}
}
しかし、これらのボックスは排他制御されないことに注意してください
双方のチェックをオンにすることが可能です
チェックボックスグループ
複数のチェックボックスの項目の中から、一つだけを選んでほしいプログラムの場合
それぞれのチェックボックスが排他的に制御されなければなりません
このような場合は、Checkboxクラスのコンストラクタでチェックボックスグループの登録をします
public Checkbox( String label, CheckboxGroup group, boolean state )
このjava.awt.CheckboxGroupクラスの同じオブジェクトを持つチェックボックスは
それぞれがグループとして扱われ、排他制御されます
いずれかのボックスをオンにすると、他のチェックボックスは全てオフになります
CheckboxGroupクラスのコンストラクタは、パラメータが空の単純なコンストラクタのみです
public CheckboxGroup()
このようにグループ化すれば、複数の項目から一つをユーザーに要求するなどに便利です
実際にアプリケーションなどでは、設定項目で頻繁に用いられます
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
/* <applet code="test.class" width="300"height="300">
</applet>
*/
public class test extends Applet implements ItemListener {
Checkbox ch[] = new Checkbox[2];
Label l;
public void init() {
setBackground(Color.white);
CheckboxGroup grp = new CheckboxGroup();
ch[0] = (Checkbox)add(new Checkbox("SAKURA" , grp , true));
ch[1] = (Checkbox)add(new Checkbox("TOMOYO" , grp , false));
ch[0].addItemListener(this);
ch[1].addItemListener(this);
l = (Label)add(new Label("Card Captor Sakura☆"));
}
public void itemStateChanged(ItemEvent e) {
Checkbox ch = (Checkbox)e.getItemSelectable();
l.setText(ch.getLabel() + " : " + ch.getState());
}
}
先程のプログラムをチェックボックスグループで制御したものです
今度は、どちらか一方のチェックボックスしかオンにできません