表示といくつかのウィジェットを作成して、アプリケーションのメッセージ・ループを開始したら、実際の作業はどの時点で行われるのでしょうか? それは、イベントがキューから読み取られ、ウィジェットへディスパッチされるごとに起こります。 ほとんどのアプリケーション・ロジックは、ユーザーのイベントへの応答として実装されます。
基本的なパターンでは、作成したウィジェットにリスナーを追加し、該当するイベントが発生したときにリスナー・コードが 実行されます。 以下に、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 のパッケージに定義されています。
下の表に、使用可能なイベントおよび各イベントをサポートするウィジェットを示します。
|
イベントの型 |
説明 |
ウィジェット |
|---|---|---|
|
Arm |
メニュー項目などのウィジェットがアームされるときに生成されます。 |
MenuItem |
|
Control |
コントロールが移動またはサイズ変更されるときに生成されます。 |
Control, TableColumn, Tracker |
|
Dispose |
ウィジェットがプログラムによって、またはユーザーによって手動で削除されるときに生成されます。 |
Widget |
|
Focus |
コントロールがフォーカスを得たり失ったりするときに生成されます。 |
Control |
|
Help |
F1 キーを押すなどして、ユーザーがウィジェットにヘルプを要求するときに生成されます。 |
Control, Menu, MenuItem |
|
Key |
コントロールがキーボード・フォーカスを保持する場合に、ユーザーがキーボード・キーを押したり放したりすると生成されます。 |
Control |
|
Menu |
メニューが隠されたり、表示されたりする場合に生成されます。 |
Menu |
|
Modify |
ウィジェットのテキストが変更される場合に生成されます。 |
CCombo, Combo, Text, StyledText |
|
Mouse |
コントロール上でマウスを押したり、放したり、またはダブルクリックしたりすると生成されます。 |
Control |
|
MouseMove |
コントロールの上を横切ってマウスを動かすと生成されます。 |
Control |
|
MouseTrack |
コントロール上にマウスが現れたり、消えたり、移動するときに生成されます。 |
Control |
|
Paint |
コントロールが再描画を必要とするときに生成されます。 |
Control |
|
Selection |
ユーザーがコントロール内のアイテムを選択するときに生成されます。 |
Button, CCombo, Combo, CoolItem, CTabFolder, List, MenuItem, Sash, Scale, ScrollBar, Slider, StyledText, TabFolder, Table, Table Cursor, TableColumn, TableTree, Text, ToolItem, Tree |
|
Shell |
シェルを最小化、最大化、活動化、非活動化、または閉じるときに生成されます。 |
Shell |
|
Traverse |
キー・ストロークを使うユーザーによって、 コントロールが横切られるときに生成されます。 |
Control |
|
Tree |
ツリー内のアイテムをユーザーが展開または縮小表示するときに生成されます。 |
Tree, TableTree |
|
Verify |
ウィジェットのテキストが変更される直前に生成されます。これにより、 アプリケーションは、テキストを変更するか変更を防止するかを確認します。 |
Text, StyledText |
上記の型付きイベント・システムは、 低レベルの型なしウィジェット・イベント・メカニズムを使用して実装されます。 このメカニズムは、アプリケーションによって使用されるよう意図されたものではなく、 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);