Urumaについて

ドキュメント

プロジェクト文書

Built by Maven
最終更新: 2008/07/13

メソッド・バインディング

Uruma では、画面上にボタンが押されるなどのイベントが発生した際、S2Container に登録されたコンポーネント上のメソッドを呼び出すことができます。

これを、メソッド・バインディング(Method Binding) と呼びます。

メソッド・バインディングを利用すると、GUI プログラミングにありがちなリスナークラスをいちいち作成するという、面倒なコーディングから解放されます。

アクション・クラス

メソッド・バインディングにより画面から呼び出されるクラスのことを、Uruma ではアクション・クラス と呼びます。アクション・クラスは画面と1対1となるように作成します。 今まで Web アプリケーションを作成してきた方は、Web アプリケーションにおける Action クラス とほぼ同じ位置づけと理解していただければよいでしょう。 アクション・クラスは、以下の命名規則で S2Container に登録します。

 (画面の id (先頭を大文字にしたもの)) + Action

たとえば、画面の id (window 要素の id です)が、「hoge」の場合、「HogeAction」がアクション・クラスのコンポーネント名となります。

Convention over Configuration の考え方により、設定ファイルを書かなくても画面と POJO が結びつけられるわけです。

メソッドの呼び出し

メソッド・バインディングでは、GUI コンポーネントの持つ id が、呼び出すメソッドを指定する役割を持ちます。

まず、アクション・クラス上で呼び出されるメソッドは、必ず @EventListener が記述されており、引数なしのメソッドである必要があります。次に、GUI コンポーネントの id と同じ名前のメソッドが呼び出されます。

たとえば、次のようなボタンがあった場合、

 <button id="ok" text="OK" />

以下のようなメソッドと対応します。

 @EventListener
 public void ok() {
 }

また、次のように @EventListener アノテーションの id 属性を明示的に指定することもできます。

この場合、メソッド名は自由に決めることができます。

@EventListener(id="ok")
public void onOkButton() {
}

イベントの指定

@EventListener アノテーションでは、type 属性により、呼び出されるイベントを指定することができます。

たとえば、以下のような例では、ラベル上でマウスカーソルが動くたびにメソッドが呼び出されます。

@EventListener(type=EventListenerType.MOUSE_MOVE)
public void label() {
}

type 属性で指定する値は、EventListenerType クラスで定義されている定数を指定します。

定数には以下のようなものがあり、SWT で定義されているすべてのイベントを指定できます。

また、イベントの利用例については、org.seasar.uruma.annotation.EventListenerTypeTest クラスをご覧ください。

なお、type 属性に何も指定しない場合は、EventListenerType.SELECTION を指定したのと同じことになります。

イベント 説明 イベント 説明
KEY_DOWN キーを押したとき ICONIFY ウィンドウがアイコン化されたとき
KEY_UP キーを離したとき DEICONIFY ウィンドウがアイコン化状態から元に戻ったとき
MOUSE_DOWN マウスのボタンを押したとき CLOSE ウィンドウがクローズされるとき
MOUSE_UP マウスのボタンを放したとき ACTIVATE ウィンドウがアクティブ化されたとき
MOUSE_MOVE マウスカーソルを動かしたとき DEACTIVATE ウィンドウが非アクティブ化されたとき
MOUSE_ENTER マウスカーソルがコンポーネント上に入ったとき SHOW メニューが表示されたとき
MOUSE_EXIT マウスカーソルがコンポーネント上から出たとき HIDE メニューが非表示になったとき
MOUSE_DOUBLE_CLICK ダブルクリックするとき MODIFY
MOUSE_HOVER マウスカーソルを動かしたとき VERIFY
PAINT コンポーネントを描画するとき HELP
MOVE コンポーネントが移動したとき ARM
RESIZE コンポーネントのサイズが変更されたとき TRAVERSE
DISPOSE コンポーネントが破棄されたとき DRAG_DETECT ドラッグされたとき
SELECTION コンポーネントが選択されたとき HARD_KEY_DOWN キーが押されたとき
DEFAULT_SELECTION デフォルトのコンポーネントが選択されたとき HARD_KEY_UP キーが離されたとき
FOCUS_IN コンポーネントにフォーカスが移ったとき MENU_DETECT
FOCUS_OUT コンポーネントからフォーカスがはずれたとき SET_DATA
EXPAND ツリーの項目が展開されたとき MOUSE_WHEEL マウスホイールが回転したとき
COLLAPSE ツリーの項目が折りたたまれたとき
イベント一覧

イニシャライズ・メソッド

アクション・クラスに @InitializeMethod アノテーションが記述されたメソッドがある場合、画面を表示する直前にそのメソッドが呼び出されます。

  @InitializedMethod
  public void initialize() {
     ...
  }

なお、@InitializeMethod アノテートできるメソッド(以下、「イニシャライズ・メソッド」と呼びます)には以下のような制約があります。

  • ひとつのアクション・クラスにひとつのメソッドしかアノテートできません。(複数のメソッドに @InitializeMethod アノテーションを記述することはできません)
  • イニシャライズ・メソッドは、引数無し、戻り値なしのメソッドでなくてはなりません。

ポストオープン・メソッド

アクション・クラスに @PostOpenMethod アノテーションが記述されたメソッドがある場合、画面を表示直後にそのメソッドが呼び出されます。

  @PostOpenMethod
  public void postOpen() {
     ...
  }

なお、@PostOpenMethod アノテートできるメソッド(以下、「ポストオープン・メソッド」と呼びます)には以下のような制約があります。

  • ひとつのアクション・クラスにひとつのメソッドしかアノテートできません。(複数のメソッドに @PostOpenMethod アノテーションを記述することはできません)
  • ポストオープン・メソッドは、引数無し、戻り値なしのメソッドでなくてはなりません。