スポンサーリンク
スポンサーリンク

【Swing衰退】JavaFXを使うべき理由を3つのポイントで解説

JavaFXはクライアントシステムを制作するには非常に強いので、Javaプログラマとしては是非習得しておきたいものです。

そんなJavaFXはJava8から追加された機能ですが、今までのSwingとはどう違うのか、Swingが衰退した今、JavaFXの新しい3つのポイントをまとめてみました。

JavaFX Scene Builderで直感的に組み立てる

 

これがJavaFXの最大の強みであり、Swingではできなかったことです。

この「JavaFX Scene Builder」を使うことで、「Label」や「Button」、「ウィンドウサイズ」や「View」の追加など様々なことがGUIで操作できるようになります。

上記の画像が「JavaFX Scene Builder」の操作画面です。

最近では「Scene Builder」の開発は「2.0」以降からメンテナンス状態になっており、今後の最新バージョンのリリースが行われる見込みは実はあまりないのですが、それでも「Gluon Mobile」に代表されるように「JavaFX」が活用される例は沢山あるので、「Scene Builder」も絶対的ではなく、ある1つの「JavaFX」用のツールとしてみた方がいいでしょう。

インストール(パソコンで閲覧の方)

JavaFX Scene Builder 1.x Archive
JavaFX Scene Builder 1.x Archive

上記のリンクにアクセスし、以下の画像を参考にダウンロードを行ってください。

ダウンロードができたらダウンロードしたファイルをクリックし、インストールを開始してください。

ファイル自体は容量が少ないので、この作業は大して時間はかかりません。

 JavaFX Scene Builderで生成されるファイル(.fxml)

「JavaFX Scene Builder」では、「fxmlファイル」というファイルが作成されます。

この「fxml」は名前の通り「xml」の書き方と非常に似ています。

そしてこのファイルは、JavaFXのプログラムから呼び出すことができ、指定の関数を用いることで簡単にレイアウトをウィンドウに設定することができます

これまでのSwingでは、Javaのプログラムに直接大量のプログラムを書き込むことでレイアウトの作成をしていましたが、JavaFXでは、「fxmlファイル」があればJavaのプログラムでは数行でレイアウトの作成を実現することができます

 

これは、ウィンドウアプリケーションを作成する上では、とても便利な機能と言えます。

CSSファイルで装飾ができる

Swingにはできなかった機能として、Javaのプログラムで使用する「ボタン」や「ラベル」などの部品を「CSSファイル」で装飾することができる機能があります。

今まで、Swingではレイアウトとデザインは統合して行われていましたが、JavaFXからはCSSとJavaが分離することで、デザインとレイアウトを別々に管理・作成することができるようになりました。

例えば以下のCSS。

これは、「button」というクラスのCSS設定です。

「-fx-background-color」という属性に値を設定しています。

ここで注目するべきが、先頭の「-fx」です。

これが「JavaFX」で使用するための属性であることを意味しています。

「JavaFX」で用意されている「fxml」を読み込むためのプログラムでは本来のCSSの属性「JavaFX」で用いるCSSの属性を区別する必要があるため、「-fx」が付けられることになりました。

以下のリンク(Oracle公式ドキュメント)では、JavaFXで使用できるCSSの属性一覧が載っています。どういう属性があるのかを調べたい時は、現状ではこのリンクが一番のソースだと思います。

JavaFX CSSリファレンス・ガイド
This document describes the JavaFX Cascading Style Sheets (CSS) for JavaFX 8 and explains the styles, values, properties and associa

Swingの機能互換

JavaFXを使う上で、Swingのクラスがまったく使えなくなることはありません。

SwingのクラスをJavaFXで使う一例が以下のプログラムです。

プログラム例 (Main.java)

マーカー部分が重要なポイントです。

この「SwingNode」というクラスですが、このクラスはJavaFXで使われる部品(ButtonやLabelなど)の最上位の親クラスである「Node」クラスを継承した子クラスです。

この「SwingNode」クラスでは、JavaFXでいう「Node」に該当する「JComponent」クラスを「Node」に変換することができます。

これを図にすると

このように、「JComponent」を継承したSwingのクラスを、JavaFXで使用できるように「Node」を継承したものに変換し、その変換したものを「Scene」に追加するというやり方です。

このようにして、SwingのクラスをJavaFXでも使えるようにすることができます。

JavaFXではSwingの機能と互換性があるため、Swingに拘る必要がほぼなくなりました。

まとめ

 

(1)JavaFXでは、「FXML」ファイルを用いてレイアウトを設定することができる。

(2)JavaFXでは、「CSS」ファイルを用いて部品の装飾を行うことができる。

(3)JavaFXでは、Swingの機能互換があり、Swingの機能をすべて使うことができる。

以上の3つがJavaFXでできるようになった3つの重要なポイントです。

関連記事

「JavaFX Scene Builder」(JavaFX自体も含めて)を学びたい方へ

JavaFXで電卓を作ろう!!

コメント