表示といくつかのウィジェットを作成して、アプリケーションのメッセージ・ループを開始したら、実際の作業はどの時点で行われるのでしょうか? それは、イベントがキューから読み取られ、ウィジェットへディスパッチされるごとに起こります。 ほとんどのアプリケーション・ロジックは、ユーザーのイベントへの応答として実装されます。
基本的なパターンでは、作成したウィジェットにリスナーを追加し、該当するイベントが発生したときにリスナー・コードが 実行されます。 以下に、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 つは、より特定のユーザー相互作用を記述する低レベル・イベントです。 高レベル・イベントは、プラットフォームごとに異なる場合がある複数の低レベル・イベントで表すことができます。 低レベル・イベントは、一般に、カスタム・ウィジェットの実装にのみ使用する必要があります。
イベントの型 |
説明 |
---|---|
Activate、Decativate | コントロールが活動化または非活動化されると、生成されます。 |
Arm | MenuItem が準備されます (強調表示され、選択可能になります)。 |
Close | ウィンドウ・マネージャーから要求されたため、シェルが閉じようとしています。 |
DefaultSelection | ユーザーがデフォルト選択アクションを起動して、項目を選択します。例えば、Enter キーを押すか、またはテーブル内の行をダブルクリックします。 |
Dispose | ウィジェットがプログラマチックに、またはユーザーによって破棄されようとしています。 |
DragDetect | ユーザーが可能なドラッグ操作を開始しました。 |
Expand、Collapse | ツリー内の項目が展開または縮小されています。 |
Help | ユーザーがウィジェットに関するヘルプを要求しました。例えば、Windows で F1 キーが押された場合に発生します。 |
Iconify、Deiconify | シェルが最小化、最大化、または復元されました。 |
MenuDetect | ユーザーがコンテキスト・メニューを要求しました。 |
Modify | ウィジェットのテキストが変更されました。 |
Move、Resize | コントロールの位置またはサイズが、プログラマチックにまたはユーザーによって変更されました。 |
Selection | ユーザーがコントロール内の項目を選択します。例えば、テーブル内の行をシングル・クリックしたり、キーボードを使用して項目間を移動します。 |
SetData | 仮想テーブルを使用するときに、TableItem にデータを設定する必要があります。 |
Show、Hide | コントロールの可視性が変更されました。 |
Traverse | ユーザーがキー・ストロークを使用して、コントロールから離れようとしています。例えば、エスケープまたはタブ・キーを使用して、移動しようとしています。 |
Verify | ウィジェットのテキストが変更されようとしています。このイベントにより、 アプリケーションは、テキストを変更するか変更を防止することができます。 |
イベントの型 |
説明 |
---|---|
FocusIn、FocusOut | コントロールがフォーカスを得たかまたは失いました。 |
KeyDown、KeyUp | コントロールがキーボード・フォーカスを保持しているときに、ユーザーがキーボード・キーを押したかまたは放しました。 |
MouseDown、MouseUp、MouseDoubleClick | ユーザーがコントロール上でマウスのボタンを押したか、離したか、またはダブルクリックしました。 |
MouseMove | ユーザーがコントロール上でマウスを移動しました。 |
MouseEnter、MouseExit、 MouseHover | コントロールの外から内に、内から外に、またはコントロール上でマウスを移動しました。 |
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);