表示といくつかのウィジェットを作成して、アプリケーションのメッセージ・ループを開始したら、実際の作業はどの時点で行われるのでしょうか? それは、イベントがキューから読み取られ、ウィジェットへディスパッチされるごとに起こります。 ほとんどのアプリケーション・ロジックは、ユーザーのイベントへの応答としてインプリメントされます。
基本的なパターンでは、作成したウィジェットにリスナーを追加し、該当するイベントが発生したときにリスナー・コードが 実行されます。 以下に、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);