无法使用 Java FX 中包含的组件自定义视图

Not able to customize the view with Included Components in Java FX

我创建了一个 child 组件,并使用 fx:include.

将其包含在另一个 parent 组件中

parent 和 child 的控制器实例化良好。
但是,在 parent FXML 中,我将 GridPane 作为 parent 用于 child fxml。 child fxml 默认添加到 (0, 0)。当我想使用 SceneBuilder 更改视图并将 child 组件放入不同的 row/column 索引时,我无法将组件拖入其中。

我只能组织VBox里面的组件,不能满足我的需要

Parent FXML:

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.AnchorPane?>
<fx:root maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" type="AnchorPane" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <fx:include source="test.fxml" />
   </children>
</fx:root>

Child FXML:

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Label?>
<Label text="Label" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" />

请尝试看看您是否可以在 parent 视图中使用 child 视图。例如,我无法将 child 放在任意位置的网格视图中。

在与OP讨论后,我发现OP实际上想要在父fxml中包含GridPane,他想将包含的fxml放在GridPane的特定行和列索引处。默认情况下,SceneBuilder 将 FXML 添加到 (0,0)。

SceneBuilder 目前不支持。

但是您可以直接编辑 FXML 并更改其中的 rowIndex 和 columnIndex。

Parent.fxml

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.GridPane?>

<GridPane xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1">
    <children>
        <fx:include source="child.fxml" GridPane.rowIndex="1" GridPane.columnIndex="1" />
    </children>
</GridPane>

在 SceneBuilder 中包含 FXML 的步骤:

  • 选择 GridPane 作为根布局

  • 转到"Include FXML"

  • 选择要包含的 FXML

  • FXML 添加到 GridPane