TextInputの作成
では、ソースコードを順に見ていきましょう。まずは、「TextInput」の利用部分からです。ここではインスタンス作成後、setSizeで大きさを調整しています。その後、getStylesでStyleDictionaryを取得し、これにフォントを設定しています。以下の部分です。
input = new TextInput(); input.setSize(200, 20); StyleDictionary style2 = input.getStyles(); style2.put("font", new Font("Serif", Font.PLAIN, 16));
実際にやってみると分かることですが、StyleDictionaryに"font"のスタイルを追加しておくことは、非常に重要です。Pivotのコンポーネント類は、デフォルトで英語フォントが設定されているようで、明示的にフォントを指定しておかないと日本語が文字化けしてしまうようです。これはバージョンアップ等により修正されるかも知れませんが、現在のところは「日本語が文字化けしたら、フォント設定を疑う」と考えておいてください。
PushButtonの作成とボタンプレスイベント
続いて、PushButtonです。PushButtonは、プロパティの設定だけでなく、ボタンをクリックした時のイベント処理も用意することになります。以下がPushButton関係の処理部分です。
button = new PushButton("OK"); button.getButtonPressListeners().add(new ButtonPressListener() { @Override public void buttonPressed(Button arg0) { String s = input.getText(); label.setText("You typed: " + s); } });
まずnewでインスタンスを作成しますが、このとき第1引数に、ボタンに表示するテキストを渡します。インスタンス作成後、ボタンクリック時のイベント処理を実装しています。Pivotのコンポーネントも、AWTなどと同様にイベントリスナーによるデリゲート・イベント処理を採用しています。が、実装の方法はかなり異なります。
Pivotのコンポーネントでは、イベントは「ListenerList」というクラスを使って管理されています。これは文字通り、イベントリスナーのインスタンスをまとめて管理するリストです。それぞれのコンポーネントでは、各イベントごとにこのListenerListを使って組み込まれたイベントリスナーを管理するようになっています。
PushButtonをクリックした時のイベント処理は「ButtonPressListeners」というイベントリスナーとして用意されています。PushButtonの「getButtonPressListeners」というメソッドにより、コンポーネントに組み込まれているButtonPressListenersを管理するためのListenerListを取得することができます。こうして取得されたListenerListに、「add」というメソッドを使ってButtonPressListenerインスタンスを追加すれば、ボタンクリック時にそのイベントリスナーが呼ばれるようになります。
ButtonPressListenerには、「buttonPressed」というメソッドが1つだけ用意されています。これが、クリック時に呼び出されるメソッドになります。引数が1つだけ用意されており、イベントが発生したButton(PushButtonのスーパークラス)インスタンスが渡されます。
ここでは、buttonPressedで、TextInputのテキストを取得し、Labelの表示テキストを変更しています。テキストの取得や変更は「getText」「setText」で行うことができます。
BoxPaneの利用
最後にコンテナであるBoxPaneの処理部分についてです。BoxPaneは、垂直または水平方向にコンポーネントを並べて配置するコンテナです。Swingに用意されているBoxLayoutのようなものと考えればよいでしょう。これはインスタンスを作成する際、レイアウトする方向を引数で指定します。
BoxPane box = new BoxPane(Orientation.VERTICAL);
並べる方向は、Orientationクラスにクラスフィールドとして用意されている値を利用します。
垂直方向に並べる「VERTICAL」、水平方向に並べる「HORIZONTAL」が用意されています。これでインスタンスを作成したら、後は追加するコンポーネントを「add」メソッドで組み込んでいきます。
box.add(label); box.add(input); box.add(button);
これで、組み込んだ順番にコンポーネントが縦に整列表示されます。ペインはこの他にもありますが、基本的に「newした後、addで組み込む」という流れは変わりません。一通りコンポーネントを組み込み終わったら、後はこれをWindowにsetContentすれば、すべてのコンポーネントが整列表示されるというわけです。