長らく待たされたJava8が登場してしばらく経過しますが、既にみなさんはこの新しいバージョンに慣れてきたでしょうか。Java8では、さまざまな新機能が追加されていますが、中でもJava界に激震が走った改革といえば「Swingから
JavaFXへの移行」でしょう。
これまで、Javaでデスクトップアプリケーションを開発する際、GUIライブラリとして利用されてきたのは「
AWT」と「
Swing」でした。といっても、
AWTはGUIの基本として用意されているだけで、実際に活用されていたのはそれをベースに構築された
Swingだった、といってよいでしょう。
Swingは長らくJavaの標準GUIとして広く使われてきました。
が、Java8になって、新しい「
JavaFX」が標準装備され、
Swingから
JavaFXへの切り替えが確定しました。もちろん、当面は
Swingも共存しますのですぐになくなることはありませんが、いずれ
Swingが廃止され
JavaFXに一本化するのはほぼ決まりのようです。(これは現在、Javaの開発を手がけるオラクルのWebサイトに明記されています。
http://www.oracle.com/technetwork/jp/java/javafx/overview/faq-1446554-ja.html#6 「JavaFXはJava SE向けの新しいクライアントUIライブラリとしてSwingに取って代わりますか」)
では、この
JavaFXというのはどういうものなのでしょうか。
長らく
Swingを利用してきた人の多くは、「どうせAWTや
Swingをベースにして改良したものだろう? 少し調べればすぐ使えるようになるさ」と思っている人も多いかもしれません。
Swingが登場したとき、内容的には一新されてはいても、イベントシステムやグラフィックの描画システムなど基本的な構造は
AWTをそのまま踏襲していたため、それほどの混乱は起こらなかったように思えます。もちろん、新しいGUIが大量に追加されましたから
AWTとは全く違うものになっていましたが、それでも「根本の概念から理解し直す」という必要はありませんでした。
Swingは「改革」であり、「革命」ではなかったのです。
が、
JavaFXは違います。これは「革命」なのです。従来の
AWT/Swingの概念はまるで通用しません。
Buttonや
TextFieldといった懐かしいクラス名はそのまま受け継がれていますが、それらが組み込まれるのは
Stageなんて見たこともないクラスだったりします(そもそも
Buttonも
TextFieldも実際にはXMLのコードで記述したりします)。まずは
Frameクラスを継承? しません(そんなクラスないし)。イベントリスナーでイベント処理? そんなもん使いません(あるけど)。
paintメソッドと
Graphcsでグラフィック描画? そんなメソッドもクラスもないです。
ほらね? それまで「JavaによるGUI利用」の根本だったものが次々と否定されて、「えっ? えっ? じゃあ一体、どうすんのよ?」と不安にかられてくるでしょう?
JavaFXは、
AWT/Swingの基本的なGUIシステムとはまるで違う、全く別の体系なのです。その点をしっかり頭にいれておいてください。