メニューとメソッドバインディング
メソッドバインディングの一環として、メニューとメソッドバインディングの関係について考えてみます。
メニューついては、すでに id:dkameya さんがレンダラを作成してくれたので、以下のようなXMLを書くことでウィンドウにメニューを追加できるようになっています。
<control type="menu"> <item label="ファイル(&F)"> <item label="開く(&O)..." /> <item label="終了(&X)" /> </item> <item label="ヘルプ(&H)"> <item label="バージョン情報(&V)..." /> </item> </control>
実際には、メニューが選択された結果としてJava側のロジックが呼び出されなくてはならないので、メソッドバインディングが必要です。
今のメソッドバインディングの仕組みは、ウィジットのIDとS2Container上のコンポーネントのメソッドを命名規約またはアノテーションで結びつけるというものでした。
今のままだと、 item 要素に id 属性はないので、直接の紐付けができません。
そこで、以下のような感じにメニューの記述方法を変えたいと思います。
<composite type="menu"> <composite type="submenu"> <property name="label">ファイル(&F)</property> <control id="menuOpen" type="menuitem"> <property name="label">開く(&O)...</property> </control> <control id="menuTerminate" type="menuitem"> <property name="label">終了(&X)</property> </control> </composite> <composite type="submenu"> <property name="label">ヘルプ(&H)</property> <control id="menuVersion" type="menuitem"> <property name="label">バージョン情報(&V)...</property> </control> </composite> </composite>
これなら、各 menuitem に対して id が付加できるので、メソッドバインディングが可能です。
欠点として、現在の方法よりも記述が煩雑になってしまうことがあげられます。(このあたりは非常に悩むところですが、将来作成するエディタでカバーできればよいでしょうか)
いかがでしょう? > id:dkameya さん。