为了账号安全,请及时绑定邮箱和手机立即绑定

每个声明都需要@FXML吗?

每个声明都需要@FXML吗?

SMILET 2019-08-19 17:40:18
每个声明都需要@FXML吗?每个声明都需要@FXML,还是第一个?换句话说,我应该使用@FXMLpublic Label timerLabel = new Label();@FXMLpublic TextField mainTextField, projectTextField ;@FXMLpublic Button goButton, deleteAllButton ;@FXMLpublic ComboBox<String> projectComboBox ;@FXMLpublic TableView<Entry> mainTable ;@FXMLpublic TableColumn<Entry, String> titleColumn, timeColumn, dateColumn ;@FXMLpublic TableColumn<Entry, Boolean> checkColumn, buttonColumn ;@FXMLpublic checkBox checkAllCheckBox ;要么@FXMLpublic Label timerLabel = new Label();public TextField mainTextField, projectTextField ;public Button goButton, deleteAllButton ;public ComboBox<String> projectComboBox ;public TableView<Entry> mainTable ;public TableColumn<Entry, String> titleColumn, timeColumn, dateColumn ;public TableColumn<Entry, Boolean> checkColumn, buttonColumn ;public checkBox checkAllCheckBox ;谢谢!
查看完整描述

3 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

所述@FXML注释使得能够FXMLLoader注入以FXML文件中定义的值转换为在控制器类的引用。换句话说,如果你的注释timerLabel@FXML,那么它将会被初始化FXMLLoader时的load()方法是通过与FXML文件中的元素叫fx:id="timerLabel"。正如其他人在评论中指出的那样,这意味着你永远不应该写代码

@FXMLprivate Label timerLabel = new Label();

这里timerLabel将首先初始化为new Label();您在代码中创建的内容,然后几乎立即重新初始化为FXML文件中定义的值。这至多是多余的,最糟糕的是误导。如果未正确匹配变量名称,则fx:id变量将引用错误,Label并且很难跟踪错误。

要了解您的实际问题:

FXMLLoader加载FXML文件时,它将尝试将具有fx:id属性的任何元素注入控制器。它会寻找

  1. public具有与fx:id属性匹配的变量名称的任何字段,

  2. 任何public具有与使用fx:id注释的属性匹配的变量名称的字段(或不具有)@FXML

因此,在您的示例中,由于您的所有字段都是public,您可以省略所有@FXML注释(即使是第一个),它仍然可以工作。

但是,如果您遵循良好做法并制作字段private,则必须注释每个声明@FXML以使注入工作。

所以

@FXMLprivate Label timerLabel;@FXMLprivate TextField mainTextField;

等会起作用,但是

@FXMLprivate Label timerLabel;private TextField mainTextField;

将不会。


查看完整回答
反对 回复 2019-08-19
?
波斯汪

TA贡献1811条经验 获得超4个赞

为每个人

fx:id="somename"

你需要一个

@FXMLpublic SomeClass somename;

我更喜欢把它写成一行,因为当有很多时候它更容易阅读

@FXML public SomeClass somename;

没有初始化

@FXMLpublic Label timerLabel = new Label(); // this is wrong


查看完整回答
反对 回复 2019-08-19
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

@FXMLprivate TextField idTextField;@FXMLprivate TextField passwordTextField;

要么

@FXMLprivate TextField idTextField, passwordTextField;


查看完整回答
反对 回复 2019-08-19
  • 3 回答
  • 0 关注
  • 3217 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信