JavaFXは、Javaプログラミング言語を使用してリッチなデスクトップアプリケーションを作成するためのフレームワークです。特に、グラフィカルなユーザーインターフェース(GUI)を簡単に構築できる強力なツールです。このガイドでは、JavaFXを使ったユーザーインターフェースの構築方法について、最新の知識と実際のコード例を交えながら解説します。
JavaFXとは何か?
JavaFXは、Java SEに統合されている最新のGUIツールキットで、2Dおよび3Dグラフィックス、音声、動画のサポート、アニメーション効果など、豊富な機能を提供しています。JavaFXは、FXML(XMLベースのマークアップ言語)を使ってUIを宣言的に設計したり、Javaコードでプログラム的に構築したりできます。これにより、開発者はGUIコンポーネントを簡単に配置し、アプリケーションの外観や動作をカスタマイズすることができます。
JavaFXの基本的なウィンドウ構造
JavaFXのアプリケーションは通常、ステージ(ウィンドウ)とシーン(コンテンツ)という2つの主要なコンポーネントを中心に構成されます。以下の例では、単純なJavaFXウィンドウを作成し、ラベルとボタンを配置します。
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.layout.StackPane; import javafx.stage.Stage; public class SimpleUI extends Application { @Override public void start(Stage primaryStage) { // UIコンポーネントの作成 Label label = new Label("Hello, JavaFX!"); Button button = new Button("Click Me"); // レイアウト設定 StackPane root = new StackPane(); root.getChildren().addAll(label, button); // シーン作成とウィンドウ設定 Scene scene = new Scene(root, 300, 200); primaryStage.setTitle("JavaFXの基本ウィンドウ"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } }
このコードは、JavaFXアプリケーションの基本構造を示しています。`Application`クラスを継承し、`start()`メソッドでウィンドウ(ステージ)を設定します。UIコンポーネントとしてラベルとボタンを作成し、`StackPane`レイアウトに配置します。シーンを作成してステージに設定し、ウィンドウを表示します。
ボタンにイベントハンドラを追加する
JavaFXでは、ボタンやテキストフィールドなどのUIコンポーネントにイベントハンドラを追加して、ユーザーの操作に応答することができます。例えば、ボタンがクリックされた際にアクションを実行するコードを見てみましょう。
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.layout.StackPane; import javafx.stage.Stage; public class ButtonEventHandler extends Application { @Override public void start(Stage primaryStage) { Label label = new Label("まだボタンはクリックされていません"); Button button = new Button("Click Me"); // ボタンにイベントハンドラを追加 button.setOnAction(e -> label.setText("ボタンがクリックされました!")); StackPane root = new StackPane(); root.getChildren().addAll(label, button); Scene scene = new Scene(root, 300, 200); primaryStage.setTitle("ボタンのイベント処理"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } }
この例では、ボタンがクリックされるとラベルのテキストが変更されるように、`setOnAction()`メソッドを使ってイベントハンドラを追加しています。ユーザーがボタンをクリックすると、ラベルに「ボタンがクリックされました!」というメッセージが表示されます。
FXMLを使ったレイアウト設計
JavaFXでは、FXMLというXMLベースのファイルを使ってユーザーインターフェースを宣言的に定義することができます。FXMLを使うことで、UI設計とビジネスロジックを分離し、UIのメンテナンスを簡単にすることができます。次の例では、FXMLファイルを使ってシンプルなUIを定義します。
上記のFXMLファイルは、ラベルとボタンを持つ垂直レイアウト(`VBox`)を定義しています。このFXMLをJavaコードで読み込み、イベント処理を追加することができます。
import javafx.application.Application; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.stage.Stage; public class FXMLExample extends Application { @FXML private Button myButton; @FXML private Label myLabel; @Override public void start(Stage primaryStage) throws Exception { Parent root = FXMLLoader.load(getClass().getResource("sample.fxml")); Scene scene = new Scene(root, 300, 200); primaryStage.setTitle("FXMLを使ったUI"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } }
この例では、FXMLファイルで定義したUIをJavaFXアプリケーションに読み込んで使用しています。`FXMLLoader`を使ってFXMLファイルを読み込み、イベント処理やその他のロジックをJavaコードで定義できます。このように、UIの宣言とビジネスロジックを分離することで、メンテナンス性の高いアプリケーションを構築できます。
CSSを使ってJavaFXのスタイルをカスタマイズする
JavaFXでは、CSS(カスケーディングスタイルシート)を使ってUIコンポーネントのスタイルをカスタマイズすることができます。これにより、アプリケーションの外観を柔軟に変更でき、ブランドに合わせたデザインを簡単に適用できます。以下は、簡単なCSSの例です。
.button { -fx-background-color: #3498db; -fx-text-fill: white; -fx-font-size: 14px; } .label { -fx-font-size: 16px; -fx-text-fill: #2c3e50; }
このCSSは、ボタンとラベルのスタイルを変更するものです。`-fx-background-color`プロパティを使ってボタンの背景色を変更し、`-fx-text-fill`でテキストの色を白に設定しています。また、`-fx-font-size`でフォントサイズを指定し、より視覚的に調整しています。
まとめ
JavaFXは、Javaで強力でリッチなユーザーインターフェースを作成するための非常に有用なフレームワークです。基本的なUIコンポーネントから、FXMLによる宣言的なUI設計、さらにはCSSを使ったスタイルのカスタマイズまで、柔軟で拡張性のあるツールセットを提供します。JavaFXを使えば、デスクトップアプリケーションを効率的かつ美しく設計できるため、ぜひ活用してみてください。