JavaFXの最小のサンプル
タグ: javajavafx / 初版公開: 2014-06-26

Java8からSwingに次ぐ新しいGUIライブラリとしてJavaFXが標準で使えるようになった。 今日はJavaFXを使い始めるにあたって参考になる最小のサンプルを書いてみる。

ウィンドウの表示

Sample1

まずはウィンドウを表示しなければはじまらない。

JavaFXのアプリケーションはApplicationを継承して作成する。 Applicationlaunch()で起動させる。 launch()するとstart()が呼ばれるのでここに初期化の処理を書く。

JavaFXではシーングラフを表すSceneで描画対象を指定する。 最小のシーングラフは適当なルートノードのみを含むグラフである。 この例では空のVBoxをルートノードとすることにする。

あとはstart()に渡されるStagesetScene()でシーングラフを設定して、Stageshow()を呼べばウィンドウが表示される。

Sample1.java

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Sample1 extends Application {
	public void start(Stage stage) throws Exception {
		VBox root = new VBox();
		stage.setScene(new Scene(root, 640, 480));
		stage.show();
	}
	public static void main(String[] args) {
		launch(args);
	}
}

ラベルの追加

Sample2

続いてVBoxにラベルを追加してみることにする。

VBoxなどレイアウトへの要素の追加は、getChildren()で得られるObservableListadd()することで行う。 JavaFXのラベルコントロールはLabelである。 コンストラクタに文字列を与えるとその文字列を表示するラベルとなる。便利だ。

以下はHello, JavaFX!という文字列を表示する例である。

Sample2.java

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Sample2 extends Application {
	public void start(Stage stage) throws Exception {
		VBox root = new VBox();
		root.getChildren().add(new Label("Hello, JavaFX!"));
		stage.setScene(new Scene(root, 640, 480));
		stage.show();
	}
	public static void main(String[] args) {
		launch(args);
	}
}

FXMLの読み込み

Sample3

JavaFXではFXMLという言語でインタフェースを記述できることが特徴となっている。 次の例ではsample2.javaと同じウィンドウをFXMLを使って表示させてみよう。

FXMLの実体はXMLである。 まずimportでインポートするコントロールを記述し、シーングラフの構造はタグで記述する。 以下に示すSample3.fxmlは、sample2.javaでプログラムで記述したシーングラフを、FXMLで書き起こしたものである。

FXMLのロードにはFXMLLoaderを利用する。 load()は引数にURLを取るので、JavaのリソースのURLをgetResource()で取得している。 EclipseであればJavaファイルと同一のフォルダにFXMLファイルを配置してやれば読み込めるはずである。

Sample3.fxml

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.VBox?>
<VBox>
	<children>
		<Label text="Hello, JavaFX!"/>
	</children>
</VBox>

Sample3.java

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Sample3 extends Application {
	public void start(Stage stage) throws Exception {
		VBox root = (VBox) FXMLLoader.load(getClass().getResource("Sample3.fxml"));
		stage.setScene(new Scene(root, 640, 480));
		stage.show();
	}
	public static void main(String[] args) {
		launch(args);
	}
}