11. Choice / List

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

(1) リストの中から1つ選択するのが Choice

 あなたの住所はという質問で「東京」「大阪」「名古屋」というリストがあるとき、この中から1つ選んでもらうようなコンポーネントを作るのが java.awt.Choice です。

 Choice の作り方はまずはじめに Choice オブジェクトを作ります。
Choice choice = new Choice( );

 次に Choice クラスの add(String item) または addItem(String item) という形式のメソッドを使って、リストの項目を作ります。

choice.add("東京");
choice.add("大阪");
choice.add("名古屋");

 選択されているもの調べたりするメソッドは以下の通りです。

String getItem(int index)
リストの index 番目のラベルを返します。

int getSelectedIndex( )

何番目の項目が選択されているかを返します。先頭は 0 です。

String getSelectedItem( )
選択されている項目のラベル(項目名)を返します。

void select(int index)
リストの index 番目の項目を選択状態にします。

void select(String item)
文字列 item の項目がリスト中にあれば選択状態にします。


 イベントに関する情報は以下の通りです。

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


  ChoiceTest.java

// ChoiceTest.java

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

public class ChoiceTest extends Applet
             implements ItemListener, ActionListener {

    Choice choice;

    public void init() {

        // コンポーネント作成
        choice = new Choice();
        choice.add("東京");
        choice.add("大阪");
        choice.add("名古屋");
        Button check = new Button("確認");
        
        // レイアウト設定
        setLayout(new FlowLayout());

        // コンポーネント追加
        add(choice);
        add(check);

        // リスナ登録 
        choice.addItemListener(this);        
        check.addActionListener(this);
    }

    public void itemStateChanged(ItemEvent e) {
        checkSelectedItem();
    }
    
    public void actionPerformed(ActionEvent e) {
        checkSelectedItem();
    }
    
    void checkSelectedItem() {
        int index = choice.getSelectedIndex();
        String item = choice.getSelectedItem();
        System.out.println( index+" 番目の "+ item + " が選択されました" );
    }
}


  ChoiceTest.html

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


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




 この例題では、違うものを選択したとき、またはボタンを押したときに選択されている項目を MS-DOS プロンプトに表示します。


(2) List による複数選択

 同じリストでも複数選択や表示行数を指定できるコンポーネントが java.awt.List クラスです。List クラスのコンストラタを使ってリストオブジェクトを作ります。
List list = new List(int row,boolean multiple);

 一つ目の引数では何行分表示するようにするか、2つ目の引数は、単一項目選択の場合は false、複数選択可能にする場合は true にします。

 リストの項目を追加するには Choice と同じように add( ) メソッドで行います。

list.add("東京");
list.add("大阪");
list.add("名古屋");

 選択されているもの調べたりするメソッドは以下の通りです。

String getItem(int index)
リストの index 番目のラベルを返します。

int getSelectedIndex( )

何番目の項目が選択されているかを返します。先頭は 0 です。

int[ ] getSelectedIndexes( )
複数選択の場合、選択されている項目のインデックスを配列で返します。

String getSelectedItem( )
選択されている項目のラベル(項目名)を返します。

String [] getSelectedItems( )
複数選択の場合、選択されている項目のラベル(項目名)を配列で返します。

void select(int index)
リストの index 番目の項目を選択状態にします。

void deselect(int index)
リストの index 番目の項目の選択状態を解除します。

 List では2つのイベントが発生します。1つは項目を選択したときの Item イベント。もう1つは項目をダブルクリックしたときの ActionEvent です。

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

イベントの種類 ダブルクリックしたとき ActionEvent 発生
イベント処理用メソッド ActionListener インタフェース内に定義されている
void actionPerformed(ActionEvent e)
リスナ登録用メソッド void addActionListener(ActionListener obj)


  ListTest.java

// ListTest.java

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

public class ListTest extends Applet
             implements ItemListener, ActionListener {

    List list;

    public void init() {

        // コンポーネント作成
        list = new List(3,true);
        list.add("東京");
        list.add("大阪");
        list.add("名古屋");
        list.add("福岡");
        list.add("北海道");
        list.add("仙台");
        list.add("富山");
        
        // レイアウト設定
        setLayout(new FlowLayout());

        // コンポーネント追加
        add(list);

        // リスナ登録 
        list.addItemListener(this);
        list.addActionListener(this);
    }

    public void itemStateChanged(ItemEvent e) {
        int index[] = list.getSelectedIndexes();
        for (int i=0;i<index.length;i++) {
            System.out.print( list.getItem( index[i] ) + " " );
        }
        if ( index.length!=0 )
            System.out.println("が選択されています");
    }
    
    public void actionPerformed(ActionEvent e) {
        System.out.println(e.getActionCommand()+" をダブルクリック");
    }
    
}


  ListTest.html

<APPLET CODE=ListTest.class width=200 height=200>
</APPLET>


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


前の章(10.CheckBox/RadioButton)   次の章(12.Frame)