前々から名前だけは知っていたのですが、JavaFXを少し勉強してみようと思って、インストールをしました。
聞いた話では、JDK7のインストール後にJavaFXのインストーラが起動するとのことだったのですが、私のところのJDK7 Update 9ではインストーラが出てきた覚えがない。Windowsの64bit版だから?そんなことはないよね?そう言えばJDK6のインストーラにあったJava DBのチェックもなかったし。
結論を言うと、JavaFXはJDK7のrt.jarと同じところにありました。jfxrt.jarという15MBくらいのファイルがそうです。そう言えばrt.jarも60MB近くあるのですね。
参考資料「JavaFX 2.1のインストール (Windows 編)」
次に、私はEclipseをメインで使っているので、e(fx)clipseというプラグインを入れました。でも、インストール手順がちょっとひどくて、更新サイトのアドレスが間違っているのです。
更新マネージャにアドレス入れてもエラーになるし、アドレスもNightly buildsと階層構造が違うし、おかしいとは思ったのですが、実際に更新サイトのアドレスをブラウザで開いたら、.zipや.tar.gzのダウンロードサイトじゃないですか!いろいろ探って、上に書いた正しいアドレスを見つけました。
インストールできるプラグインもいくつかに分かれていて、よくわからないので "do not install" と書いてないものだけをインストールしようとすると依存関係云々で先に進めない。いろいろ試してみて、"e(fx)clipse - Composite - FX Tooling" だけをインストールするのが正解のようです。まったく、わかりづらいですよね?
さて、インストールが終わると、Eclipse上からJavaFXのプロジェクトを作成できるようになります。jfxrt.jarがrt.jarと同じところにあるのに "JRE システム・ライブラリー" に含まれず "JavaFX SDK" という別のライブラリに入っているのはこの際目を瞑りましょう。理由が皆目見当つかないです(OracleのJDKとJavaFXのチームは連携取れてないの?)。
JavaFXを触るのは初めてなので、インストールの待ち時間などを使って「JavaFX 2で始めるGUI開発 第1回 JavaFX 2とは」を読みながら進めています。
e(fx)clipseにはとりあえずFXMLファイルとJavaFXのMainクラスのテンプレートは用意されているようですが、案の定というべきか画面レイアウトを作成するGUIが入っていません。どうもJavaFX Scene BuilderがNetBeansだけでなくEclipseでも使えるようなので、これもインストールしました。FXMLファイルを "FXML Editor" で開くとEclipse上での編集となり、"システム・エディター" で開くとScene Builderで編集できるようです。Scene Builderには「ソースを編集」みたいな機能が見つからなくて(私の見落としの可能性があるので、ご存知の方はお声掛けください)、代わりといっていいのかe(fx)clipseでソース(FXML)の編集ができる感じです。
参考にした記事のサンプルでは、FXMLは使わずにJavaのコードだけでGUIを作るようです。テンプレートに記事のサンプルの内容を実装して、私史上初めてのJavaFXアプリケーションを作ってみました。
package org.yumix.javafx; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.layout.AnchorPane; import javafx.stage.Stage; public class Hello extends Application { @Override public void start(Stage primaryStage) { primaryStage.setTitle("Hello, World!"); AnchorPane root = new AnchorPane(); Label label = new Label("Hello, world!"); root.getChildren().add(label); Scene scene = new Scene(root, 400, 100); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } }
単に "Hello, World!" と表示するだけのものですが、実際に動いてみるとなん嬉しいものですね。
でも、せっかくインストールしたScene Builderを使わないのは何だかもったいない気がしたので、初めてのサンプルをScene Builderを使って書き直してみました。参考資料は先ほどの記事の続編「JavaFX 2で始めるGUI開発 第2回 シーングラフとFXML」です。ソースコードは割愛しますが、 GitHubに完全な形のプロジェクト(Eclipse形式・e(fx)clipse必須)をアップロードしてあります。
https://github.com/yumix/HelloJavaFX
実は、勢い余ってJavaFX Advent Calendarなるものにエントリしてしまいました。今の流れだと私の担当は12/19、つまり私の誕生日になりそうです。それまでにJavaFXのことを勉強して、恥を書かない程度のものは出したいと思います。そう言えば、今回の参考資料の執筆も、Advent Calendarの主催も櫻庭さん @skrb なのですね。私は今回始めてお名前をお見受けしたのですが、JavaFXのことを知り尽くしているからこそ書ける内容だと感じています(櫻庭さんって、実はとてつもなくすごい方なのかしら?)