fxml ソースの配置

JavaFX の画面デザインレイアウトは一度決定してリリースしたらそんなに変更差し替えるものではなかろう。

Maven で基本アーキタイプ生成のサンプル、

GitHub - javafx-maven-plugin/javafx-basic-archetype: A Maven archetype for generating a basic JavaFX starter project.

これによって作った構造は、以下のようになる。
f:id:posturan:20170304180521j:plain

そして、起動画面での fxml 読込みの部分は、(MainAppクラスでは)

String fxmlFile = "/fxml/hello.fxml";
FXMLLoader loader = new FXMLLoader();
Parent rootNode = (Parent)loader.load(getClass().getResourceAsStream(fxmlFile));

Mavenで生成されてくる。いまいちである。

JavaFX で画面数もそんなに作らないならこれでもいいだろう。でもやはり複数画面になるなら、

Wicket のスタイルのように、画面を構成するクラスと画面を定義するソースを同じ場所に置き、
画面毎のパッケージにしたいものだ。

そこで、以下のように配置換えする。
f:id:posturan:20170304181109j:plain

そして、fxml 読込みも画面のクラスである HelloController から参照して持ってくるように
指定した方が、直感的であるし「画面クラス→画面クラスの fxml 名指定」という命名規則も作りやすい。

FXMLLoader loader = new FXMLLoader();
Parent rootNode = (Parent)loader.load(HelloController.class.getResourceAsStream("hello.fxml"));

コードも見やすいはずだ。


Maven アーキタイプカタログXMLを作ればいいんだろうけど、まだカタログXMLの作り方を習得してない。