What is it, naokirin?

JavaFXに触れてみた

最近GroovyとかClojureとかを触ってた影響で、Javaのライブラリとかフレームワークを使うことが増えてきました。

その中で、今回はJavaFX2.0に触れてみたのでちょっとだけ使い方を書いておきます。
まあ、Web上に既にかなりの量の情報が上がっているので、誰かの役に立つということはないと思いますが…


ちなみに私はコードをGroovyで書いていますが、多分改行時部分に";"をつければ、Javaでも動くと思います。

あと表示例はWindows上でのものです。

インストール方法

JavaFXOracleからダウンロードして、インストールすればいいです。

あとはJavaFXのインストールディレクトリに存在するjfxrt.jarをクラスパスに設定すれば動きます。

一番簡単なGUI

まず最初に、JavaFXでウィンドウの表示を行ってみます。

import javafx.application.Application
import javafx.stage.Stage


class SampleJavaFX extends Application{
  @Override
  void start(Stage stage) {
    stage.show()
  }

  public static void main(String[] args){
    Application.launch(this, args)
  }
}

まずjavafx.application.Applicationを継承したクラスを作成します。

class SampleJavaFX extends Application{...}

そして、start()と言うメソッドをオーバーライドして、実際の表示の処理を書いていきます。
今回はウィンドウを表示するだけなので、stage.show()のみが書かれています。

@Override
void start(Stage stage) {
  stage.show()
}


最後に、メインメソッドでアプリケーションを起動するためにlaunch()メソッドを呼び出します。
メインメソッドがstart()メソッドの実装されたクラスにあれば通常は引数でクラスを指定する必要はないのですが、一般的な書き方としてクラスとコマンドライン引数を渡しています。

public static void main(String[] args){
  Application.launch(this, args)
}

これで何もないウィンドウが表示されます。

ウィンドウに名前をつけて、テキストを表示してみる

次にウィンドウのタイトルをつけてみます。

import javafx.application.Application
import javafx.stage.Stage


class SampleJavaFX extends Application{
  @Override
  void start(Stage stage) {
    stage.setTitle("ウィンドウにタイトルをつけてみた")
    stage.show()
  }

  public static void main(String[] args){
    Application.launch(this, args)
  }
}

ウィンドウの表示から追加されているのは

stage.setTitle("ウィンドウにタイトルをつけてみた")

だけです。


次にテキストをウィンドウに表示してみます。
ここで新しくSceneと言うクラスと、表示されるオブジェクトとなるの様々なクラスを扱うことになります。

import javafx.application.Application
import javafx.stage.Stage
import javafx.scene.Scene
import javafx.scene.text.Text
import javafx.scene.layout.StackPane


class SampleJavaFX extends Application{
  @Override
  void start(Stage stage) {
    StackPane stackPane = new StackPane()
    Scene scene = new Scene(stackPane)
    stackPane.getChildren().add(new Text("テキストを追加してみた"))

    stage.setTitle("ウィンドウにタイトルをつけてみた")
    stage.setScene(scene)
    stage.show()
  }

  public static void main(String[] args){
    Application.launch(this, args)
  }
}

ウィンドウ内の表示はSceneというクラスが担っています。
ウィンドウ内に表示されるオブジェクトは階層構造となっているため、Sceneに最上位となるオブジェクトをコンストラクタで渡す必要があります。
今回はStackPaneのオブジェクトを渡しています。

StackPane stackPane = new StackPane()
Scene scene = new Scene(stackPane)

次に、最上位オブジェクトであるStackPaneにTextのオブジェクトを子として追加します。

stackPane.getChildren().add(new Text("テキストを追加してみた"))


最後にSceneオブジェクトをstageにセットします。

stage.setScene(scene)


使ってみた感想

JavaFXはRIAプラットフォームで、従来のAWTやSwingよりも簡単にGUIを作成できて表現力は高いということだそうです。

単純な階層構造で表現されている辺りは、レイアウトをする際にはHTMLの感覚に近い気がします。
表示はAWTやSwingよりも格段に綺麗になっているみたいです。GUI自体もあまり複雑な感じはしません。

少々日本語の表示に難があるらしく、自動ではテキストの表示範囲を正確に割り出せずに、自動で割り出した表示領域をテキストがはみ出てしまったりしています。
その辺りの調整は今後に期待と言うところでしょうか。

今回はイベントやバインディングなどの実際のアプリケーション開発に必要な部分を書いていませんが、イベントなどもそれほど苦労せず実装できます。

AWTやSwingでGUIをやっている人、またそれらでGUIアプリけションを作ろうと思っている人にはぜひこちらも試してもらいたいというフレームワークでした。