我已经使用场景生成器构建了一个场景,我有两个文本字段是UI的一部分,一个用于风味,一个用于顶部。 在控制器中,我用@FXML注释了每个文本字段属性。我的问题是:如何将 UI 中的字段与控制器类中的属性相关联?
java代码看起来像:
@FXML
private TextField flavorValueField;
@FXML
private TextField toppingValueField;
在 ui 中,字段存在于场景中,但实际上没有任何与之关联的字段来标识它们。他们需要什么吗?我不清楚,我如何确保 UI 中的字段和代码中的字段之间的绑定以我希望的方式发生。
仅仅说是不够的,它只是有效。我想了解代码如何知道将 UI 中的一个字段绑定到代码中的属性。UI 字段是通用的。没有标识符或分类器说,这个是味道,那个是顶部。如果它只是"工作",绑定是如何发生的?
FXMLLoader
检查 fxml 文件中fx:id
属性。如果控制器中存在与此属性的值匹配的FXMLLoader
可见字段,FXMLLoader
尝试使用反射将为包含该属性的元素创建的对象分配给该字段。
例如
<Button fx:id="foo"/> <!-- this is assigned to the foo field, if possible -->
<Button fx:id="bar"/> <!-- this is assigned to the bar field, if possible -->
@FXML
private Button bar;
@FXML
private Object foo;
请注意,这些值仅在 fxml 完成加载或在initialize
方法(如果存在(中可用。在控制器的初始值设定项/构造函数中,它们仍然包含null
.
你不需要做任何事情,而不是你所做的。它只是@FXML,它将 UI 中的字段与控制器变量绑定。确保将 UI 中的场景与场景生成器中的控制器绑定。