ラジオボタン
2003.04.16 update.

複数の選択肢から1つを選択する場合のラジオボタンです。
ラジオボタンは、1つのウィンドウ・またはグループ内で 1つのみ選択状態にします。
「Button」の第二引数に「SWT.RADIO」を指定することにより作成します。


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");

    //ラジオボタンをウィンドウに配置
    Button but = new Button(shell,SWT.RADIO);
    but.setText("ラジオボタン1");
    but.setBounds(10,10,120,24);
    but.setSelection(true);

    Button but2 = new Button(shell,SWT.RADIO);
    but2.setText("ラジオボタン2");
    but2.setBounds(10,10+24,120,24);

    Button but3 = new Button(shell,SWT.RADIO);
    but3.setText("ラジオボタン3");
    but3.setBounds(10,10+24+24,120,24);

    //グループをウィンドウに配置
    Group gr = new Group(shell,SWT.NONE);
    gr.setText("Group");

    //ラジオボタンをグループに配置
    gr.setBounds(20,86,140,70);
    Button but4 = new Button(gr,SWT.RADIO);
    but4.setText("ラジオボタン4");
    but4.setBounds(10,14,120,24);

    Button but5 = new Button(gr,SWT.RADIO);
    but5.setText("ラジオボタン5");
    but5.setBounds(10,14+24,120,24);

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

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

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




「Button」のコンストラクタにて第二引数で「SWT.RADIO」を指定することにより、ラジオボタンを生成します。
「setText」で表示する文字列を指定しています。
「setBounds」で表示位置と表示サイズを指定しています。
「setSelection」で選択状態にします。
その後に同様に、but2/but3を配置しています。
同じウィンドウまたはグループに配置しているラジオボタンは、1つが選択されると他のものが非選択状態になります。

上記のソースでは、グループ内にラジオボタン「but4/but5」を配置しています。
挙動としては、「but/but2/but3」が連動しており「but4/but5」がグループ内で連動しています。

チェックイベントの受け取り

ラジオボタンがチェックされた、またはチェックがはずされた(=他が選択された) 場合に、イベントが発生します。

but.addSelectionListener(new SelectionListener() {
  public void widgetDefaultSelected(SelectionEvent e){
  }
  public void widgetSelected(SelectionEvent e){
    Button bBut = (Button)e.widget;

    if(bBut.getSelection()){
      System.out.println("widgetSelected : 選択されている "+ bBut.getText());
    } else {
      System.out.println("widgetSelected : 選択されていない"+ bBut.getText());
    }
  }
});


他のボタン・チェックボックスなどとまったく同じです。
「Button」の「addSelectionListener」にて、ボタンが選択された場合のイベントを設定します。 「widgetSelected」は、ボタンが選択された場合・または選択が解除された場合に呼ばれます。
「Button bBut = (Button)e.widget;」より呼ばれたボタンのオブジェクトを取得して、「getSelection()」にてチェックが選択状態かをチェックしています。
「bBut.getText()」にて、イベントの起こったウィジットのテキストを取得しています。