チョイス


コンボボックスを作る

チョイスとは、Windowsのコントロールで言うコンボボックスです
クリックすると必要な項目が一覧され、そのうちから一つを選択することができます

チョイスは、選択一覧の表示にコンポーネントの場所を取りません
非常にコンパクトで、直感的に操作しやすいので便利です

チョイスを生成するにはjava.awt.Choiceクラスを使用します
コンストラクタはパラメータを受け取りません

public Choice()

初期段階で、チョイスのリストは空です
これに選択メニュー項目を追加するにはadd()メソッドかaddItem()メソッドを指定します

public synchronized void add( String item )
public synchronized void addItem( String item )

itemには、追加する項目の文字列を指定します
両方とも得られる結果は同じです

イベントリスナを追加するには次のメソッドを使用します

public synchronized void addItemListener( ItemListener lis )

ItemListenerは前回やったので説明不要ですね
ChoiceクラスもItemSelectableインターフェイスをインプリメントしています

選択されているメニューなどの情報を得るには、やはりitemStateChanged()メソッドの
ItemEventクラスのgetItemselectable()でChoiceにキャストしたオブジェクトから得ます

Choiceクラスのメソッドで、選択されているメニューのインデックスを得るにはgetSelectedIndex()メソッドを使用します
インデックスはメニューの一番上を0として、一行下がるごとに1づつ増えます
現在選択されているメニューの文字列表現を得るにはgetSelectedItem()メソッドを、
また、指定インデックスの文字列を得るにはgetItem()メソッドを使用します

public int getSelectedIndex()
public synchronized String getSelectedItem()
public String getItem( int index )

それぞれ、要求したデータを返します
getItem()のindexには、メニューのインデックスを指定します
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

/*	<applet code="App33.class" width="300"height="300">
 	</applet>
*/

public class App33 extends Applet implements ItemListener {
	public void init() {
		setBackground(Color.white);

		Choice cho = (Choice)add(new Choice());
		cho.add("RENA");
		cho.addItem("YUKI");
		cho.add("MIMI");
		cho.addItemListener(this);
	}
	public void itemStateChanged(ItemEvent e) {
		Choice cho = (Choice)e.getItemSelectable();
		if (cho.getSelectedIndex() == 0) setBackground(Color.red);
		if (cho.getSelectedIndex() == 1) setBackground(Color.blue);
		if (cho.getSelectedIndex() == 2) setBackground(Color.orange);
	}
}
アプレット

もちろん、メニューの内容を削除したり
プログラム側で意図的に選択させたりすることも可能です

指定位置のメニューの削除にはChoiceクラスのremove()メソッドを、
全てをクリアする場合はremoveAll()メソッドを指定します

public synchronized void remove( String item )
public synchronized void remove( int position )
public synchronized void removeAll()

itemには、削除したいメニューの文字列表現を指定します
指定文字列と最初に一致したメニューを削除します
positionは、削除したいメニューのインデックス番号を指定します

指定メニューを意図的に選択させる場合はselect()メソッドを使用します

public synchronized void select( int pos )
public synchronized void select( String str )

パラメータの意味はremove()同様に、インデックス番号か文字列表現かです

チョイスのメニューが空の状態で削除しようとすると例外が発生します
そこで、チョイスに選択メニューがない場合は削除する処理をしないようにする必要があります
そのためにはgetItemCount()メソッドで、選択メニューの項目数を得ます

public int getItemCount()

これらの機能を利用すれば、自由にチョイスの項目を
プログラムの中で動的に変化させることができます
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

/*	<applet code="App34.class" width="300"height="300">
 	</applet>
*/

public class App34 extends Applet implements ActionListener {
	Choice cho;
	public void init() {
		setBackground(Color.white);

		cho = (Choice)add(new Choice());
		cho.add("RENA");
		cho.addItem("YUKI");
		cho.add("MIMI");

		Button but1 = (Button)add(new Button("削除"));
		Button but2 = (Button)add(new Button("クリア"));
		but1.addActionListener(this);
		but2.addActionListener(this);
	}
	public void actionPerformed(ActionEvent e) {
		if (cho.getItemCount() != 0) {
			if (e.getActionCommand() == "削除") cho.remove(cho.getSelectedIndex());
			if (e.getActionCommand() == "クリア") cho.removeAll();
		}
	}
}
アプレット



前のページへ戻る次のページへ