1 FXMLを使用する理由
この章では、FXMLの基本的な説明およびこれを使用してユーザー・インタフェースを作成する利点を示します。
FXMLは、コードのアプリケーション・ロジックから切り離してユーザー・インタフェースをビルドするための構造を提供するXMLベースの言語です。このようにプレゼンテーションとアプリケーション・ロジックを分けることで、データをフェッチおよび入力するためのコードを習得しなくても、Javaコンポーネントを活用するユーザー・インタフェースをアセンブルできるため、Web開発者にとって魅力的です。
次の項では、FXMLに関する詳細な情報、およびユーザー・インタフェースを作成するその他のメソッドよりも優先してFXMLを選択する状況を示します。
FXMLの概要
FXMLにはスキーマが存在しませんが、事前定義された基本的な構造は存在します。FXMLで表現できるもの、およびそれをシーン・グラフの作成に適用する方法は、作成しているオブジェクトのAPIに依存します。FXMLでは直接Javaにマップされるため、APIのドキュメントを使用すれば、どの要素および属性が許可されているかを理解できます。一般に、ほとんどのJavaFXクラスは要素として使用でき、ほとんどのBeanプロパティは属性として使用できます。
モデル・ビュー・コントローラ(MVC)の観点からは、ユーザー・インタフェースの説明が含まれるFXMLファイルはビューです。コントローラは、オプションでInitializable
クラスを実装するJavaクラスであり、FXMLファイル用のコントローラとして宣言されます。モデルは、コントローラを介してビューに接続する、Java側で定義されたドメイン・オブジェクトで構成されます。この構造の例については、「FXMLを使用したアドレス帳の作成」チュートリアルを参照してください
FXMLを使用すれば、あらゆるユーザー・インタフェースを作成できますが、FXMLは、大規模で複雑なシーン・グラフ、フォーム、データ・エントリまたは複雑なアニメーションが備わったユーザー・インタフェースを作成する際に特に役立ちます。また、FXMLはフォーム、コントロール、表などの静的なレイアウトの定義にも適しています。さらに、FXMLを使用すると、スクリプトを含めることで動的なレイアウトを作成できます。
FXMLの単純な例
FXMLの利点を最も簡単に示す方法は、例を使用することです。図1-1に示されているユーザー・インタフェースには、上部と中央のリージョンのある枠線付きペインのレイアウトが含まれ、各リージョンにラベルがあります。
まず、例1-1に示すように、ユーザー・インタフェースを作成し、ソース・コードに直接組み込む方法を確認します。
例1-1 ユーザー・インタフェースのJavaコード
BorderPane border = new BorderPane(); Label toppanetext = new Label("Page Title"); border.setTop(toppanetext); Label centerpanetext = new Label ("Some data here"); border.setCenter(centerpanetext);
例1-2は、同じユーザー・インタフェースを示していますが、FXMLマークアップで作成されています。ユーザー・インタフェースの階層構造を確認できるため、コンポーネントの追加およびユーザー・インタフェースの作成がより簡単になります。
FXMLの利点
FXMLを使用すると、Web開発者がよく使用するアプローチでユーザー・インタフェースを設計できることに加えて、次のような利点が得られます。
-
FXMLではシーン・グラフがより透過的になるため、開発チームはテスト可能なユーザー・インタフェースを簡単に作成およびメンテナンスできます。
-
FXMLはコンパイル済の言語ではないため、変更を確認するために、コードを再コンパイルする必要がありません。
-
ファイルが読み取られたら、FXMLファイルの内容をローカライズできます。たとえば、en_USロケールを使用してFXMLファイルがロードされると、次のリソース文字列に基づいて、ラベルに対応した文字列「First Name」が生成されます。
<Label text="%firstName"/>
ロケールがfr_FRに変更され、FXMLファイルが再ロードされると、ラベルに「Prénom」と表示されます。
このことはJavaコードには当てはまりません。その理由は、ユーザー・インタフェースのすべての要素の内容は、それへの参照を取得し、適切なセッター(
setText()
など)をコールすることで手動で更新する必要があるためです。 -
FXMLは、Java、Scala、Clojureなどの任意のJava仮想マシン(JVM)言語とともに使用できます。
-
FXMLは、MVCインタフェースのビュー部分に制限されていません。サービスやタスクまたはドメイン・オブジェクトを作成したり、FXMLでJavaScriptやその他のスクリプト言語を使用できます。JavaScriptの使用例については、開始ガイドのFXMLチュートリアルの「スクリプト言語を使用したイベントの処理」を参照してください。
FXMLおよびScene Builder
XMLコードで直接作業することを好む開発者がいるように、ツールを使用してXMLを作成することを好む開発者もいます。FXMLにも同じことが当てはまります。
ツールを使用することを好む場合や、フィードバックを得るために素早くプロトタイプを作成する必要がある場合は、JavaFX Scene Builderの使用が好まれることがあります。Scene Builderは、アプリケーション用にユーザー・インタフェースを定義すると、FXMLソース・コードが生成される設計ツールです。Scene Builderは、コンポーネントをアプリケーション・ロジックに接続するインタラクティブなアプリケーションのプロトタイプを素早く作成する際に役立ちます。詳細は、JavaFX Scene Builderの概要ドキュメントを参照してください。
Scene Builderではシリアライゼーション形式としてXMLが使用されるため、生成されるFXMLコードが非常に明瞭で、Scene Builderで生成されたFXMLファイルを任意のテキスト・エディタやXMLエディタでさらに編集できます。
NetBeans IDE 7.4以降では、コンピュータにJavaFX Scene Builderがインストールされていれば、JavaFX Scene BuilderでFXMLファイルを開くことができます。このようにNetBeansとScene Builderがより緊密に統合されることで、FXMLアプリケーションの開発時にさらなる利点が得られます。