WTKXファイルを使う
このサンプルでは、すべてのコンポーネントをJavaのメソッドで作成し、組み込んでいました。基本的な作り方はAWT/Swingなどと同じと言えますが、PivotではJavaのコードを書くほかに、XMLファイルとしてGUIを定義する方法も用意されています。
GUI用のXMLファイルは「WTKX」ファイルとして作成します。これは、拡張子を「.wtkx」として作成したテキストファイルです。この中に、XMLデータとしてGUIを記述します。
では、実際に作成してみましょう。HelloApp.javaと同じフォルダ内に、「HelloApp.wtkx」という名前でテキストファイルを作成してください。キャラクタエンコーディングはUTF-8とします。そして次のようにソースコードを記述してください。
<Window title="Sample" maximized="true" xmlns:wtkx="http://pivot.apache.org/wtkx" xmlns="org.apache.pivot.wtk"> <content> <Label wtkx:id="label1" styles="{font:'bold 24', color:'#0000FF', verticalAlignment:'center', horizontalAlignment:'center'}" text="日本語もOKだ!" /> </content> </Window>
これがWTKXによるGUIの定義です。ここでは、先程と同様にWindowの中にLabelを1つ組み込むという形でGUIを作っています(同じだと違いがわからないので、表示テキストと色だけ変えてあります)。このタグの構成を見ると、このようになっていることが分かります。
<Window> <content> <Label /> </content> </Window>
<Window>タグが、Windowクラスに相当するものであることは想像がつくでしょう。その中のcontentというプロパティに<Label>タグを用意しています。これがLabelインスタンスの定義となるわけです。それぞれのタグに記述されている属性を見ると、先にstartupメソッドで記述したプロパティの設定と同じような構成となっていることが分かるでしょう。
WTKXファイルをロードする
では、作成したWTKXファイルをロードして表示を作成するようにソースコードを修正しましょう。先ほどのサンプルで、startupメソッドを次のように書き換えてください。
// org.apache.pivot.wtkx.WTKXSerializer をimportする @Override public void startup(Display display, Map<String, String> map) throws Exception { WTKXSerializer wtkxSerializer = new WTKXSerializer(); window = (Window)wtkxSerializer.readObject(this, "HelloApp.wtkx"); window.open(display); }
これで、WTKXファイルをロードして表示することができます。WTKXのロードは、org.apache.pivot.wtkx.WTKXSerializerというクラスを利用します。newでインスタンスを作成し、「readObject」というメソッドを使ってファイルをロードするのです。このreadObjectは、いくつかの引数を持ったものがオーバーロードされていますが、ここでは第1引数にベースオブジェクト(this)、第2引数にファイル名を指定する形で呼び出しています。これにより、HelloAppクラスと同じ場所に配置されているHelloApp.wtkxがロードできます。
readObjectは、指定のファイルをロードし、オブジェクトを生成して返します。ロードしたHelloApp.wtkxでは、<Window>がルートに設定されていますので、Windowインスタンスとして生成することになります。そこでWindowにキャストして値を変数に代入しています。こうして取得されたwindowインスタンスは、先ほどのサンプルのようにnew Windowして作成したものとまったく同じように扱うことができます。
まとめ
今回は、Pivotの導入編ということで、入手からプロジェクトの基本的な作成、またJavaクラスとWTKXファイルの基本的なコーディングまでを一通り説明しました。まだWindowとLabelを使って簡単な表示をした程度ですからPivotの威力のほどを感じるまでには至らないでしょうが、どのようにしてPivotを利用するのか、その基本ぐらいは理解できたことでしょう。
Pivotは、これまで紹介してきたようなフレームワークとはかなり毛色が違います。何しろサーバーサイドのJava技術をまったく使っていないのですから。次回、もう少し掘り下げて説明を行いたいと考えていますが、Pivotの理解にとどまらず、これが「アプレットの再評価」につながれば、と思います。アプレットも進化しているのだ、ということを私たちはうっかり忘れていたのかも知れませんね。