NO:1
直接在需要嵌套的模块下写
<fx:include source="../test.fxml">
优点:不用做多余的注释,直接拉过来就能用,和h5页面的include()方法相同。
缺点:要在外层做一个空间,比如AnchorPane这样的,去调整内嵌进来的页面的位置。
NO.2
这种方法就略微复杂了一些
使用该<fx:root>
元素允许您向现有元素添加内容,需要一种方法来获取应该用作根元素的节点的引用,并将其传递给FXMLLoader
加载第二个fxml时。可以使用命名空间来使用fx:id
属性获取该元素:
@Override
public void start(Stage primaryStage) throws IOException {
FXMLLoader outerLoader = new FXMLLoader(getClass().getResource("outer.fxml"));
Scene scene = new Scene(outerLoader.load());
URL inner = getClass().getResource("inner1.fxml");
// URL inner = getClass().getResource("inner2.fxml");
FXMLLoader innerLoader = new FXMLLoader(inner);
// get insertion point from outer fxml
innerLoader.setRoot(outerLoader.getNamespace().get("insertionPoint"));
innerLoader.load();
primaryStage.setScene(scene);
primaryStage.show();
}
outer.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.*?>
<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1">
<children>
<BorderPane AnchorPane.topAnchor="10" fx:id="insertionPoint"/>
</children>
</AnchorPane>
inner1.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<fx:root type="javafx.scene.layout.BorderPane" xmlns:fx="http://javafx.com/fxml/1">
<center>
<Label text="Hello from inner 1."/>
</center>
</fx:root>
inner2.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<fx:root type="javafx.scene.layout.BorderPane" xmlns:fx="http://javafx.com/fxml/1">
<center>
<Label text="Greetings from inner 2."/>
</center>
</fx:root>
优点:对于内嵌进入的页面可以进行详细的设置
缺点:调用页面过程较为复杂