WTKXからロードする
では今のGUIを、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!" />
</BoxPane>
</content>
</Window>
<content>タグ内に、今回使用したコンポーネント類がまとめられています。ここでは、次のようなタグが使われていることが分かります。
| タグ | 説明 |
| <BoxPane> | BoxPaneコンテナのタグです。orientation属性でレイアウトの方向を指定します。 |
| <Label> | これは既に説明しました。Labelコンポーネントのタグです。 |
| <TextInput> | 入力フィールドTextInputコンポーネントのタグです。stylesでフォントだけ指定してあります。 |
| <PushButton> | PushButtonコンポーネントのタグです。ここではイベント関係は特に用意しておらず、buttonDataだけ用意してあります。 |
これらのうち、コンポーネント関係にはすべて「wtkx:id」という属性が用意されています。これは、各要素を識別するためのIDです。これは、この後のstartupメソッドで必要となるものですので、必ず用意しておきます。
startupメソッドを修正する
では、WTKXファイルからGUIをロードして使用するように、HelloAppクラスのstartupメソッドを修正しましょう。
// org.apache.pivot.wtkx.WTKXSerializer をインポートする
@Override
public void startup(Display display, Map<String, String> map)
throws Exception {
WTKXSerializer serializer = new WTKXSerializer();
window = (Window)serializer.readObject(this, "HelloApp.wtkx");
label = (Label)serializer.get("label");
input = (TextInput)serializer.get("input");
button = (PushButton)serializer.get("button");
button.getButtonPressListeners().add(new ButtonPressListener() {
@Override
public void buttonPressed(Button arg0) {
String s = input.getText();
label.setText("You typed: " + s);
}
});
window.open(display);
}

これで完成です。実際にプログラムを動かしてみて、先ほどとまったく同じようにGUIが表示され、ボタンのクリックイベントが動作することを確認してください。
WTKXからGUIをロードするには、WTKXSerializerクラスのreadObjectを利用しました。これでWindowはロードされますが、その中に組み込まれているコンポーネント類を取得するにはどうするのでしょうか。これは「get」メソッドで取り出せます。
変数 =《WTKXSerializer》.get(《wtkx:idの値》);
このようにして呼び出します。引数には、先ほどWTKXのコンポーネント・タグに用意したwtkx:idの値を指定します。これにより、指定のwtkx:idのタグで定義されたコンポーネントが変数に取得される、というわけです。
