キーボードイベント
2003.04.10 update.

キーボードイベントの受け取り方法です。
キーボードイベントは、各ウィンドウごと・各ウィジットごとに取得することができるようになっています。
フォーカスが合っているウィンドウ・またはウィジットから、キーボードイベントを取得できます。
「Label」などにも、キーボードリスナーの登録は可能ですが、キーボードイベントは取得できないようです。

以下は、ウィンドウ(Shell)よりキーボードイベントを取得している例です。


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

public class swtTest {

  public static void main(String argv[]){

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

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

    shell.addKeyListener(new KeyListener() {
      public void keyPressed(KeyEvent e){
        //キーボードが押されたときの処理
        System.out.println("Pressed : ch " + Integer.toString(e.character));
        System.out.println("keyCode "+ Integer.toString(e.keyCode,16));
        System.out.println("stateMask "+ Integer.toString(e.stateMask,16));
      }
      public void keyReleased(KeyEvent e){
        //キーボードが離されたときの処理
        System.out.println("Released : ch " + Integer.toString(e.character));
        System.out.println("keyCode "+ Integer.toString(e.keyCode,16));
        System.out.println("stateMask "+ Integer.toString(e.stateMask,16));
      }
    });

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

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

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


「addKeyListener」にて「KeyListener」を登録し、
キーボードが押されたときの「keyPressed」、
キーボードが離されたときの「keyReleased」、
よりキーボードイベントを取得します。

キー状態の内容は、引数の「KeyEvent」より取得することができます。

KeyEvent

「keyPressed」「keyReleased」の引数にて、以下のキー情報を取得します。