JavaFXML documentationが不足している限り、fx:includeは、FXMLを個々のファイルに分割して別のファイルに含める方法です'コンテンツはコピーペーストされました。つまり、Cインクルードコンパイラ指令を使用するのと同じです。JavaFX fx:親コントローラのシーン可視性を含む
しかし、含まれているFXMLドキュメント内のノードが親のコントローラに見えないため、そうではないようです。次のことを考えてみましょう:
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.control.*?>
<GridPane xmlns:fx="http://javafx.com/fxml" fx:controller="Sample.controller">
<ToolBar xmlns:fx="http://javafx.com/fxml" fx:id="aToolbar">
<Button fx:id="aButton" text="Press me Baby!"/>
</ToolBar>
</GridPane>
期待通りに動作しますが、次のコードは...
<?import javafx.scene.layout.GridPane?>
<GridPane xmlns:fx="http://javafx.com/fxml" fx:controller="Sample.controller">
<fx:include source="children.fxml"/>
</GridPane>
children.fxmlは、(上記のように)次のものが含まれていない場合は:
<?import javafx.scene.control.*?>
<ToolBar xmlns:fx="http://javafx.com/fxml" fx:id="aToolbar">
<Button fx:id="aButton" text="Press me Baby!"/>
</ToolBar>
children.fxml内のノードは、親コントローラには表示されません。 children.fxml内のノードはシーングラフの一部になり、ルートにはコントローラがあります。 結果(aButtonにイベントハンドラをアタッチする場合)は、NullPointerExceptionです。
そう... FXMLファイルを実行してくださいFXを使用して含まれます。includeが自分のコントローラを必要とし、そうであれば、なぜですか?複数のコントローラ間の通信を必要とせずに、シーングラフの大部分を分離することは素晴らしい機能です。