はじめに
アプレットで最初に覚えるべきは「基本的なコンポーネントの使い方」です。Apache Pivot(以下、Pivot)にも、さまざまなコンポーネントが用意されています。それらの中から、最も基本となるものをピックアップし、使い方を見ていくことにしましょう。
コンポーネントの使い方といっても、「ただインスタンスを作って組み込んで表示できればOK」というわけではありません。入力関係は、入力された値を取り出して処理する手順も知る必要があります。また、例えば多数のコンポーネントをフォームとしてレイアウトし配置することも重要でしょう。またテキスト入力に関しては、入力された値をチェックするバリデーションについても知って置く必要があります。こうした「基本的なコンポーネントを普通に利用できるための基礎知識」について説明していきましょう。
Pivotの基礎知識・導入などについては第1回の記事を参照してください。
対象読者
- Javaで手ごろなフレームワークを探している技術者。
- 最近のフレームワークをごくざっと理解しておきたい方。
- Web開発の手法がどうも気に入らない、と常々考えているJavaプログラマ。
プッシュボタンと入力フィールド
では、Pivotに用意されている各種のコンポーネントを利用してみることにしましょう。まずは、最も基本となる入力フィールドとプッシュボタンを使ったサンプルを作成してみます。また、せっかくボタンを作るのですから、クリックした際に何らかを行うイベント処理も併せて作ることにしましょう。ごく単純なものとして、入力フィールドからテキストを取り出し、ラベルに表示するようなものを用意することにします。
入力フィールドとプッシュボタンは、それぞれ「TextInput」「PushButton」というクラスとして用意されています。これらのクラスを作成し、必要なプロパティの設定をして組み込めばいいわけです。ただし、注意しなければならないのは、「WindowにsetContentできるのは、1つのコンポーネントだけ」という点です。複数のコンポーネントを組み込むことはできません。
そこで、コンポーネントをまとめて配置するコンテナを利用することになります。Pivotでは、コンテナは「ペイン(Pane)」と呼ばれるクラスとして用意されています。これはいくつかありますが、今回は縦または横にコンポーネントを並べて配置する「BoxPane」というクラスを利用することにしましょう。
では、前回作成したHelloApp.javaのソースコードを書き換えて再利用することにします。次のように修正してください。
package jp.tuyano.pivot; import java.awt.*; import org.apache.pivot.collections.Map; import org.apache.pivot.wtk.*; import org.apache.pivot.wtk.Button; import org.apache.pivot.wtk.Label; import org.apache.pivot.wtk.Window; import org.apache.pivot.wtk.Component.StyleDictionary; public class HelloApp implements Application { private Window window; private Label label; private TextInput input; private PushButton button; @Override public void startup(Display display, Map<String, String> map) throws Exception { label = new Label(); label.setText("Hello Pivot!"); StyleDictionary style = label.getStyles(); style.put("font", new Font("Serif", Font.BOLD, 24)); style.put("color", Color.RED); style.put("horizontalAlignment", HorizontalAlignment.CENTER); style.put("verticalAlignment", VerticalAlignment.CENTER); input = new TextInput(); input.setSize(200, 20); StyleDictionary style2 = input.getStyles(); style2.put("font", new Font("Serif", Font.PLAIN, 16)); button = new PushButton("OK"); button.getButtonPressListeners().add(new ButtonPressListener() { @Override public void buttonPressed(Button arg0) { String s = input.getText(); label.setText("You typed: " + s); } }); BoxPane box = new BoxPane(Orientation.VERTICAL); box.add(label); box.add(input); box.add(button); window = new Window(); window.setContent(box); window.setTitle("Hello Pivot!"); window.setMaximized(true); window.setSize(320, 200); window.open(display); } @Override public boolean shutdown(boolean arg0) throws Exception { return false; } @Override public void suspend() throws Exception {} @Override public void resume() throws Exception {} public static void main(String[] args) { DesktopApplicationContext.main(HelloApp.class, args); } }
HelloAppを再利用していますので、アプレットを表示するindex.htmlは修正する必要はありません。実際にアプリケーションとして実行するなり、アプレットとして表示するなりしてみてください。入力フィールドとプッシュボタンがある画面が表示されます。テキストを記述してボタンをクリックすると、表示されているテキストが変わります。
なお、ここではPivotのGUIがまとめられているorg.apache.pivot.wtkパッケージの他に、java.awtパッケージのクラスも使用しています。両者のパッケージをワイルドカードで指定する場合、Labelなど同名のクラスが複数検索され、問題を起こすことになります、あいまいさを避けるため、明示的にorg.apache.pivot.wtk.Labelといった形でimportを追記してください。