【发布时间】:2016-05-19 19:44:09
【问题描述】:
据我从相当缺乏的JavaFXML documentation 中收集到的信息,fx:include 是一种可以将 FXML 分离为单个文件然后将它们包含到另一个文件中的方式,就像文件内容被复制粘贴一样:即类似于使用 C 包含编译器指令。
但是,情况似乎并非如此,因为包含的 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。
所以... 使用 fx:include 包含的 FXML 文件是否需要自己的控制器?如果需要,为什么?在不需要多个控制器之间进行通信的情况下分离大部分场景图将是一个不错的功能。
【问题讨论】: