2014年01月04日(土) [長年日記]
■ [java] JavaFXでFXMLを読み込む
JavaFXを使ってみる。公式ドキュメントは
かな。日本語の情報はJavaFX 2で始めるGUI開発の連載くらいしか見当たらないのでこれを順番に読んでみる。この連載は目次が見当たらず不便。連載の第1回ではFXMLを読み込む例が説明されているのでそれを試してみる。
メインクラス
JavaFXにはjavafx.application.Applicationクラスが用意されている。ひとまずはこれのサブクラスでmain()を実装すればよさそう。
package hello;
import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Hello extends Application {
@Override
public void start(Stage primaryStage) throws IOException {
Parent root = FXMLLoader.load(getClass().getResource("Hello.fxml"));
primaryStage.setScene(new Scene(root));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
- main()ではApplication.launch()を呼び出す。
- そうするとApplication#start()が呼ばれるようなので、ここでメインウィンドウを作成する。
- StageがSwingのJFrameみたいなものなのかな。
- StageにはSceneを設定している。
- SceneにはParentを設定している。
- ParentはFXMLLoader.load()を使ってFXMLから作れるみたい。
FXML
メインクラスでロードしているFXMLは次のような感じ。
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane id="AnchorPane" prefHeight="200" prefWidth="300">
<children>
<Label text="ハロー" />
</children>
</AnchorPane>
- ルート要素をAnchorPaneにしている。このクラスがParentのサブクラスだからFXMLLoader.load()の戻り値をParent型の変数に代入できるみたい。
- AnchorPaneの大きさを指定していて、それがウィンドウの大きさに影響する。
- FXMLの要素にはimportしたクラス名を指定できる。
実行結果
Helloを実行すると次のようなウィンドウが表示された。

[ツッコミを入れる]