リストを表示しよう
複数項目の選択
チョイスに似たコンポーネントでリストというものがあります
チョイスと違う点は、テキストエリアのような長方形に表示されるということと
指定によっては複数選択することも可能であるという点です
リストの生成にはjava.awt.Listクラスを使用します
次のコンストラクタが用意されています
public List()
public List( int rows )
public List( int rows, boolean multipleMode )
リストは、指定範囲より項目が増えた場合は自動的にスクロールバーが付きます
rowsには表示する項目数を指定します。この行数が表示できるサイズで生成されます
multipleModeをtrueにすると、複数の項目を選択することができるようになります
これを明示しなかった場合かfalseを指定すると、単一の項目しか選択できません
リスナはaddActionListener()メソッドとaddItemListener()があります
アクションリスナは、項目を選択した上でダブルクリックをしたときに
アイテムリスナはアイテムに変化が生じたときに呼び出されます
選択されているインデックスを得るにはgetSelectedIndex()メソッドを、
ただし、複数の選択を得る場合はgetSelectedIndexes()メソッドを使用します
public synchronized int getSelectedIndex()
public synchronized int[] getSelectedIndexes()
getSelectedIndex()で複数選択されていた場合は-1を返します
setSelectedIndexed()では、選択されている各インデックスを配列で返します
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
/* <applet code="App38.class" width="300"height="300">
</applet>
*/
public class App38 extends Applet implements ActionListener , ItemListener {
List lst[] = new List[2];
public void init() {
setBackground(Color.white);
for (int i = 0 ; i < 2 ; i++) {
lst[i] = (List)add(new List(5));
lst[i].add("RENA");
lst[i].add("YUKI");
lst[i].add("MIMI");
}
lst[0].addActionListener(this);
lst[1].addItemListener(this);
}
public void actionPerformed(ActionEvent e) {
changeBackground(lst[0]);
}
public void itemStateChanged(ItemEvent e) {
changeBackground(lst[1]);
}
void changeBackground(List obj) {
if (obj.getSelectedIndex() == 0) setBackground(Color.red);
if (obj.getSelectedIndex() == 1) setBackground(Color.blue);
if (obj.getSelectedIndex() == 2) setBackground(Color.orange);
}
}
それぞれ、違うイベントリスナで登録しています
見た目は違いますが、複数選択にしない場合であれば
その機能のほとんどはチョイスと同じです
複数選択の場合は、配列の操作をしなければなりません
しかし、それ以外の機能は同じです
チョイス同様に、Listクラスにも項目の削除をするremove()や
全てをクリアするremobeAll()メソッド、項目を選択するsekect()などがあります