コンボボックス
2003.04.17 update.

ドロップダウンリストの複数の選択肢より1つを選択します。または入力します。


import org.eclipse.swt.widgets.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.*;

public class swtTest {

  public static void main(String argv[]){

    Display display = new Display();
    Shell shell = new Shell(display);

    //ウィンドウのタイトルを指定
    shell.setText("swtTest");

    Combo combo = new Combo(shell,SWT.DROP_DOWN | SWT.READ_ONLY);
    combo.setBounds(10,10,120,24);
    
    int i;
    for(i=0;i<20;i++){
      combo.add("Item"+i);
    }
    combo.select(1);

    shell.setBounds(100,100,200,140);

    //イベントループ
    shell.open();
    while (!shell.isDisposed()){
      if (!display.readAndDispatch()){
        display.sleep();
      }
    }

    //破棄処理
    display.dispose();
  }
}




「Combo」のコンストラクタの第二引数にて「SWT.DROP_DOWN | SWT.READ_ONLY」で ドロップダウンのリスト+テキスト領域が読みとり専用のコンボボックスを生成します。
「setBounds」で、表示位置と表示サイズを指定します。なお、表示サイズの高さは固定で、値を変えても変化しないようです。
その後のループ内で「add」でリストに列挙する文字列を指定しています。 この場合は、「Item0」から「Item19」までの20個分の文字列が格納されます。
「select」にてリスト内の文字列を選択しています。

コンボボックスのスタイル

コンボボックスのスタイルとして、テキスト部に入力ができるものと 読みとり専用のものと2種類があります。

読みとり専用

Combo combo = new Combo(shell,SWT.DROP_DOWN | SWT.READ_ONLY);



テキストに入力可能

Combo combo = new Combo(shell,SWT.DROP_DOWN);



リストの編集

リストに列挙するアイテム(文字列)は、挿入・変更・削除などを行うための以下の命令があります。

アイテムの追加

String [] items = {"Item1","Item2","Item3","Item4"};
combo.setItems(items);


「setItems」にて、配列に格納されている文字列を格納します。
1つ1つ追加する場合は「add」を使用します。


combo.add("Itemxx");

この場合は、リストの末尾にアイテム(文字列)を追加します。

指定番目の後にアイテムを挿入する場合は、「add」の第二引数に挿入位置を指定します。


combo.add("Itemxx",1);

アイテムの変更

combo.setItem(1,"Itemxx");

指定番目のアイテムを変更します。
上の場合は、1番目のアイテムを「Itemxx」に変更しています。

アイテムの削除

combo.remove(1);

指定番目のアイテムを削除します。リスト内は、前詰めされます。

アイテムをすべて削除

combo.removeAll();

リスト内のアイテムをすべて削除します。

テキスト内の操作

コンボボックスのテキスト(入力フィールド)にて、入力が可能な状態のときの操作を行います。

テキストの指定

combo.setText("xxxx");

テキストに表示する文字列を指定します。

文字数制限

combo.setTextLimit(10);

テキストに入力可能な最大文字数を指定します。
全角文字であっても、1でカウントされます。

情報取得

選択されているテキストを取得

String str = combo.getText();

選択されているテキストを取得します。

指定のテキストをリストより検索

int index = combo.indexOf("itemxx");

指定の文字列がリスト内に含まれているか検索します。
戻り値として、リスト内の位置(インデックス)が返されます。
リストの先頭が0になります。

リストのアイテム数を取得

int cou = combo.getItemCount();

リスト内のアイテムの数を取得します。

リスト内で選択されている位置を取得

int pos = combo.getSelectionIndex();

リスト内で選択されているアイテムの、リスト内の位置(インデックス)を取得します。
リストの先頭が0になります。

イベントの取得

リストでの選択イベントの取得

combo.addSelectionListener(new SelectionListener() {
  public void widgetDefaultSelected(SelectionEvent e){
  }
  public void widgetSelected(SelectionEvent e){
    Combo bCombo = (Combo)e.widget;
    System.out.println(bCombo.getText());
  }
});


Comboの「addSelectionListener」にて「SelectionListener」を登録します。
「widgetSelected」は、リスト内のアイテムが選択されたときに呼び出されます。
上記の例では、「Combo bCombo = (Combo)e.widget;」にてComboのオブジェクトを取得して、 「bCombo.getText()」で選択されたアイテムの文字列を取得しています。

テキストの変更イベントの取得

combo.addModifyListener(new ModifyListener() {
  public void modifyText(ModifyEvent e){
    Combo bCombo = (Combo)e.widget;
    System.out.println(bCombo.getText());
  }
});


Comboの「addModifyListener」にて「ModifyListener」を登録します。
「modifyText」は、テキスト内の文字列が変更された(入力が行われた)ときに呼び出されます。
上記の例では、「Combo bCombo = (Combo)e.widget;」にてComboのオブジェクトを取得して、 「bCombo.getText()」で選択されたアイテムの文字列を取得しています。