タツノオトシゴのブログ

主にJavaに関するものです。

JavaFX on Java8(JavaFX8)のことはじめ

ようやく、Java8がリリースされました。自分的に注目なのが、JavaFXです。

以前の記事にも書いていますが、Java7までのJavaFX2.X系は、業務などで本格的にアプリを開発しようとした場合は、まだまだ機能不足でした。

JavaFX8になり、コントローラ「DatePicker」、「印刷機能」「3D機能」が追加され、AWT/Swingに負けない機能がそろいました。

ここでは、JavaFXの新機能というより、開発する上でのマイナーな情報を紹介。

JavaFX8のデモプログラム

Java7までは、JavaFXのデモ用プログラムは別途ダウンロードでしたが、Java8からは、Javaのデモ用プログラムに同梱されています。

jdk-8-windows-(x64|x86)-demos\jdk1.8.0\demo\javafx_samples」以下に格納されています。

  • Ensemble8.jar : JavaFXで利用できる部品集、Controlerのサンプルです。簡単な使い方のソースも閲覧できるため、画面をデザインするときの参考になります。
  • 3DViewer.jar : JavaFX8から追加された3D機能のでもです。fxmlファイルで出力/読み込みすることができます。
  • Modena.jar :UIコンポーネントのサンプル集です。JavaFX8から追加されたテーマCaspianなどを切り替えたりもできます。

JavaFXのソース

Java8から、Swingに変わり、正式にJava用のGUIライブラリになったので、ソースのJDKに添付されることになりました。

JDK8をインストールしたフォルダ直下に「javafx-src.zip」として格納されています。

これで、EclipseIDEからソースのAttachをして、閲覧することもできます。

JavaFXのライブラリの実体

Java7までは、JavaFXを起動する際には、JarファイルをJavaFX専用のパッケージングするか、「jre\lib\jfxrt.jar」にクラスパスを通す必要がありました。

Java8からは、完全に組み込まれることとなり、専用のパッケージングは必要なくなり、通常のJavaのMain関数と同様に起動できるようになりました。

JavaFX8から、Javaの「jre\lib\ext\jfxrt.jar」に同梱されています。

Scene Builder2.0

JavaFX8用の「Scene Builder2.0」は、まだ正式リリースになっていませんが、ほぼ問題なく利用2014年3月に正式リリースされています。

もっとも大きいのが、個人的に拡張したコントローラが利用できるようになることです。
自分で作成したJar/FXMLファイルをインポートすることで、既存のコントローラと同様に配置できます。

以前のScene Builder1.xも、直接FXMLをいじれば独自のコントローラも利用できましたが、プレビューなどできないため、あまりうれしくありませんでした。

また、Development Kitも配布され、直接SceneBuilderを呼べるようになり、今後、EclipseなどのIDEプラグインでSwingのVisualEditorのように、直接FXMLを組み立てられたりできるようになると思います。
現状のプラグイン「e(fx)clipse」は、SceneBuilderのプログラムを単に呼び、FXMLを編集できるだけでした。
これは、プラグインの開発者さんに期待です。

サードパーティ製のライブラリ

Webアプリもそうですが、画面を作るとかならず発生する問題が、入力値検証(Validator)、レベルごとのメッセージ表示(error、warn、info)、Javaのプリミティブ型とのマッピング(Converter)をどうするかです。

JavaFX2.Xの時点では、ライブラリがほぼ存在しなく、自作していました。
JavaFX8になり、というより、JavaFX8向けに各種ライブラリが作られていました。

Oracleのページの「JavaFX Third Party Tools and Utilities」に紹介されています。

個人的には、「JideFX」がお勧めですが、JavaFXのライブラリは今後増えていくと思います。

対応プラットフォーム

下記のURLから、サポートするOS、グラフィックカードなどが確認できます。

http://www.oracle.com/technetwork/java/javase/certconfig-2095354.html


JavaFX2.xのときから思ったのですが、RHEL5.x/CentOS5.xではJavaFXはサポートしていないことが残念です。

5.x系の場合、glib2のバージョンが古く、モジュール「libgio-2.0.so.0」が足りず、JavaFXの起動に失敗するためです。
なので、独自にGUIライブラリをビルドしてインストールすれば、Redhat5.xでも利用できると思いますが、あまりお薦めはしません。

当然、WindowsXPは、マイクロソフトのサポートが2014年4月に終了するので、Java8自体、WindowsXP以前のOSはサポートしていません