イベント

表示といくつかのウィジェットを作成して、アプリケーションのメッセージ・ループを開始したら、実際の作業はどの時点で行われるのでしょうか? それは、イベントがキューから読み取られ、ウィジェットへディスパッチされるごとに起こります。 ほとんどのアプリケーション・ロジックは、ユーザーのイベントへの応答として実装されます。

基本的なパターンでは、作成したウィジェットにリスナーを追加し、該当するイベントが発生したときにリスナー・コードが 実行されます。 以下に、org.eclipse.swt.examples.helloworld.HelloWorld3 を基に作成した簡単な例を示します。

   Display display = new Display ();
   Shell shell = new Shell (display);
   Label label = new Label (shell, SWT.CENTER);
   ...
   shell.addControlListener (new ControlAdapter () {
      public void controlResized (ControlEvent e) {
         label.setBounds (shell.getClientArea ());
      }
   });

リスナーのタイプごとに、リスナーを定義するインターフェース (XyzListener)、 イベント情報を提供するクラス (XyzEvent)、およびリスナーを 追加する API メソッド (addXyzListener) があります。 リスナー・インターフェースに定義されたメソッドが複数ある場合は、 リスナー・インターフェースを実装して空のメソッドを提供する アダプター (XyzAdapter) が存在します。 すべてのイベント、リスナー、およびアダプターは、 org.eclipse.swt.events のパッケージに定義されています。

下の表に、使用可能なイベントおよび各イベントをサポートするウィジェットを示します。イベントは 2 つの一般的なカテゴリーに分類できます。1 つは、コントロールに関する論理演算を表す高レベル・イベント、もう 1 つは、より特定のユーザー相互作用を記述する低レベル・イベントです。 高レベル・イベントは、プラットフォームごとに異なる場合がある複数の低レベル・イベントで表すことができます。 低レベル・イベントは、一般に、カスタム・ウィジェットの実装にのみ使用する必要があります。

高レベル・イベント

イベントの型

説明

ActivateDecativate コントロールが活動化または非活動化されると、生成されます。
Arm MenuItem が準備されます (強調表示され、選択可能になります)。
Close ウィンドウ・マネージャーから要求されたため、シェルが閉じようとしています。
DefaultSelection ユーザーがデフォルト選択アクションを起動して、項目を選択します。例えば、Enter キーを押すか、またはテーブル内の行をダブルクリックします。
Dispose ウィジェットがプログラマチックに、またはユーザーによって破棄されようとしています。
DragDetect ユーザーが可能なドラッグ操作を開始しました。
ExpandCollapse ツリー内の項目が展開または縮小されています。
Help ユーザーがウィジェットに関するヘルプを要求しました。例えば、Windows で F1 キーが押された場合に発生します。
IconifyDeiconify シェルが最小化、最大化、または復元されました。
MenuDetect ユーザーがコンテキスト・メニューを要求しました。
Modify ウィジェットのテキストが変更されました。
MoveResize コントロールの位置またはサイズが、プログラマチックにまたはユーザーによって変更されました。
Selection ユーザーがコントロール内の項目を選択します。例えば、テーブル内の行をシングル・クリックしたり、キーボードを使用して項目間を移動します。
SetData 仮想テーブルを使用するときに、TableItem にデータを設定する必要があります。
ShowHide コントロールの可視性が変更されました。
Traverse ユーザーがキー・ストロークを使用して、コントロールから離れようとしています。例えば、エスケープまたはタブ・キーを使用して、移動しようとしています。
Verify ウィジェットのテキストが変更されようとしています。このイベントにより、 アプリケーションは、テキストを変更するか変更を防止することができます。

低レベル・イベント

イベントの型

説明

FocusInFocusOut コントロールがフォーカスを得たかまたは失いました。
KeyDownKeyUp コントロールがキーボード・フォーカスを保持しているときに、ユーザーがキーボード・キーを押したかまたは放しました。
MouseDownMouseUpMouseDoubleClick ユーザーがコントロール上でマウスのボタンを押したか、離したか、またはダブルクリックしました。
MouseMove ユーザーがコントロール上でマウスを移動しました。
MouseEnterMouseExitMouseHover コントロールの外から内に、内から外に、またはコントロール上でマウスを移動しました。
MouseWheel マウス・ホイールが回転しました。
Paint コントロールが破損して、再描画が必要です。

型なしイベント

上記の型付きイベント・システムだけでなく、 SWT では低レベルの型なしウィジェット・イベント機構もサポートされます。型なしメカニズムは、イベントの型を識別する定数に依存し、 この定数と共に提供される汎用リスナーを定義します。 これにより、リスナーは "ケース・スタイル"・リスナーを実装することができます。 以下のコードの断片では、汎用イベント・ハンドラーを定義し、 いくつかのリスナーをシェルに追加します。

   Shell shell = new Shell ();
   Listener listener = new Listener () {
      public void handleEvent (Event e) {
         switch (e.type) {
            case SWT.Resize:
               System.out.println ("Resize received");
               break;
            case SWT.Paint:
               System.out.println ("Paint received");
               break;
            default:
               System.out.println ("Unknown event received");
         }
      }
   };
   shell.addListener (SWT.Resize, listener);
   shell.addListener (SWT.Paint, listener);