【发布时间】:2018-01-04 10:01:33
【问题描述】:
我的 UI 包含许多可以重用的组件;所以,我链接了几个.fxml 文件。我的父母 .fxml 嵌入了这个:
<fx:include source="Child.fxml" fx:id="first">
<fx:include source="Child.fxml" fx:id="second">
Child.fxml 看起来像这样:
<HBox xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml">
<Label fx:id="label"/>
<ComboBox fx:id="comboBox"/>
<TextField fx:id="firstTextfield"/>
<TableView fx:id="secondTextfield"/>
</HBox>
Parent.fxml 有一个已定义的fx:controller="ParentController"。问题是,我如何设置/获取父母中每个孩子的数据。
喜欢:
first.getLabel().setText("This is the first Label");
first.getComboBox().getValue();
second.getLabel().setText("This is the second Label");
...
请不要作为答案建议fist.getChildren().get(0)和其他类似方法。
我知道我只能定义一个大的.fxml,然后给每个项目一个id,但我想避免重复代码,我想将它们拆分成更小的组件,这样它可能会变得更容易理解,我可以重复使用它们。
【问题讨论】:
-
孩子们有自己的控制器吗?如果是这样,您可以在父控制器中实例化子控制器。
-
@Calips "实例化父控制器"??实例化控制器无济于事:您将拥有与加载 FXML 时创建的实例不同的实例。
-
@James_D“实例化 in 父控制器”我说的还是错了?或者也许“贴花”没有实例化大声笑
-
@James_D 我认为这正是 Sunflame 试图实现的目标:
ParentController类/实例能够实例化/使用Parent视图,因此也可以实例化Child视图。因此,@Calips 提出的方法可能是一种解决方法。 -
是的。除非您将其提供给 @ 的
setController方法,否则“实例化控制器”永远不会有用(这甚至没有真正意义:您实例化一个类 - 控制器是一个特定的对象,而不是一个类) 987654334@(在这种情况下是不可能的)。您需要已经创建的实际控制器:创建控制器类的新实例无济于事(假设这就是您的意思)。