SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Javaで軽快に使える「軽量フレームワーク」特集

Javaで軽快に使える「軽量フレームワーク」特集
~アプレットベースのRIAフレームワーク「Apache Pivot」(2)

第14回

  • X ポスト
  • このエントリーをはてなブックマークに追加

アノテーションを使った書き方

 ここではstartupでイベント処理などまで組み込んでいましたが、もしstartup内でコンポーネントを利用した処理が不要ならば、コンポーネントの取得は実はもっとシンプルにできます。Pivotに用意されているアノテーションを利用することで、コードを記述する必要がなくなるのです。HelloAppクラスに用意されているインスタンスフィールドを、次のように書き換えるのです。

@WTKX private Label label;
@WTKX private TextInput input;
@WTKX private PushButton button;

 これで、WTKXからロードされたコンポーネントが、それぞれのフィールドに自動的に設定されます。startupメソッドに、getの処理を各必要はありません。

 ここでは、org.apache.pivot.wtkx.WTKXクラスに用意されている@WTKXアノテーションを利用してインスタンスフィールドを宣言しています。これは、WTKXSerializerでロードされたオブジェクト内から、インスタンスフィールドの変数名と同じ名前のID(wtkx:id)のものを自動的にgetするものです。これにより、フィールドを用意しておくだけで自動的にロードしたコンポーネントが使えるようになります。

JavaScriptでイベント処理を実装する

 これでGUIをWTKXファイルに切り離すことはできましたが、依然としてイベント処理部分、すなわちビジネスロジックについてはJavaのコード内にまとめられています。できればこの部分も外部に切り離してしまいたいところです。

 Pivotでは、WTKX内にJavaScriptのスクリプトとして処理を記述することができます。スクリプトは、ファイルがロードされるとRhino(Java6より組み込まれているJavaScript実装)によって実行されます。では、HelloAppクラスを書き換えてみましょう。

@Override
public void startup(Display display, Map<String, String> map)
        throws Exception {
    WTKXSerializer serializer = new WTKXSerializer();
    window = (Window)serializer.readObject(this, "HelloApp.wtkx");
    window.open(display);
}

 非常にシンプルになりました。では続いて、WTKXファイルを修正しましょう。HelloApp.wtkxを次のように書き換えてください。これで先ほどと同様の処理が実装されます。

<Window title="Sample" maximized="true"
        xmlns:wtkx="http://pivot.apache.org/wtkx"
        xmlns="org.apache.pivot.wtk">
    <content>
        <BoxPane orientation="vertical">
            <Label
                wtkx:id="label"
                styles="{font:'bold 24', color:'#0000FF'}"
                text="テキストを入力:" />
            <TextInput
                wtkx:id="input"
                styles="{font:'Serif plain 14'}" />
            <PushButton
                wtkx:id="button" buttonData="OK!">
                <buttonPressListeners>
                    <wtkx:script>
                    function buttonPressed(button){
                        var s = input.getText();
                        label.setText(s + " と書いた。");
                    }
                    </wtkx:script>
                </buttonPressListeners>
            </PushButton>
        </BoxPane>
    </content>
</Window>

 ここでは、<PushButton>タグ内に、<buttonPressListeners>というタグを用意しています。これが、ButtonPressListenerの情報を記述するためのものです。この中に、リスナーに実装されるメソッドを記述します。メソッドは、<wtkx:script>タグの中に、JavaScriptの関数として記述されます。メソッド名や引数などは、ButtonPressListenerに用意されるbuttonPressedと同じであることが分かるでしょう。

 メソッド内では、wtkx:idで指定されたID(ここではinput、label)がそのまま使われています。このように、イベントまですべてWTKX内に用意してしまえば、Java側にはWTKXファイルをロードする処理だけしか書く必要はありません。Javaのコードが非常にシンプルになり、GUIの表示からイベント処理まで、ほとんどのコードをWTKXファイルという、XMLで記述したテキストファイルで用意できるようになります。

次のページ
フォームとバリデーション

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Javaで軽快に使える「軽量フレームワーク」特集連載記事一覧

もっと読む

この記事の著者

掌田 津耶乃(ショウダ ツヤノ)

三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5112 2010/05/19 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング