我有一个包含 2 个选项卡的 FXML 文件。在每个选项卡中,我都有相同的 Text
元素列表。如何避免重复每个 Text
元素?
这是我的 FXML 文件的摘录:
<Tab>
<GridPane>
<columnConstraints>
<ColumnConstraints />
</columnConstraints>
<rowConstraints>
<RowConstraints />
<RowConstraints />
<RowConstraints />
<RowConstraints />
<RowConstraints />
</rowConstraints>
<children>
<Text fx:id="text1" GridPane.rowIndex="1" />
<Text fx:id="text2" GridPane.rowIndex="2" />
<Text fx:id="text3" GridPane.rowIndex="3" />
<Text fx:id="text4" GridPane.rowIndex="4" />
</children>
</GridPane>
</Tab>
<Tab>
<GridPane>
<columnConstraints>
<ColumnConstraints />
</columnConstraints>
<rowConstraints>
<RowConstraints />
<RowConstraints />
<RowConstraints />
<RowConstraints />
<RowConstraints />
</rowConstraints>
<children>
<Text fx:id="text1" GridPane.rowIndex="1" />
<Text fx:id="text2" GridPane.rowIndex="2" />
<Text fx:id="text3" GridPane.rowIndex="3" />
<Text fx:id="text4" GridPane.rowIndex="4" />
</children>
</GridPane>
</Tab>
如果我将相同的 id 放在两个 Text
元素中(例如:两个选项卡中的 fx:id="text1"
),我会出错 (重复的 id 引用
)。
最佳答案
可以使用 fx:include
重写 fxml和嵌套 Controller 。
创建一个新的 fxml 文件 sub.fxml
包含您重复的场景部分,例如
<Tab xmlns:fx="http://javafx.com/fxml/1" fx:controller="mypackage.SubController">
<GridPane>
<columnConstraints>
<ColumnConstraints />
</columnConstraints>
<rowConstraints>
<RowConstraints />
<RowConstraints />
<RowConstraints />
<RowConstraints />
<RowConstraints />
</rowConstraints>
<children>
<Text fx:id="text1" GridPane.rowIndex="1" />
<Text fx:id="text2" GridPane.rowIndex="2" />
<Text fx:id="text3" GridPane.rowIndex="3" />
<Text fx:id="text4" GridPane.rowIndex="4" />
</children>
</GridPane>
</Tab>
创建 SubController
类并使相关部分可访问:
public class SubController {
@FXML
private Text text1;
...
@FXML
private Text text4;
public void setText1(String text) {
this.text1.setText(text);
}
...
}
现在更改“主要”fxml 以使用包含的 fxml:
<fx:include source="sub.fxml" fx:id="tab1" />
<fx:include source="sub.fxml" fx:id="tab2" />
并在父 Controller 中创建用于注入(inject) SubController
的字段:
@FXML
private SubController tab1Controller;
@FXML
private SubController tab2Controller;
您将能够像访问其他注入(inject)元素一样访问 Controller 。例如。在第一个 Tab
中设置 text1
的文本:
tab1Controller.setText1("Hello World!");
关于java - 在 FXML 文件中多次插入相同的对象 (JavaFX),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38248442/