无法使用 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
我创建了一个 child 组件,并使用 fx:include
.
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