【发布时间】:2022-01-08 10:21:09
【问题描述】:
每个声明都需要@FXML 还是只需要第一个声明?
换句话说,我应该使用
@FXML
public Label timerLabel = new Label();
@FXML
public TextField mainTextField, projectTextField ;
@FXML
public Button goButton, deleteAllButton ;
@FXML
public ComboBox<String> projectComboBox ;
@FXML
public TableView<Entry> mainTable ;
@FXML
public TableColumn<Entry, String> titleColumn, timeColumn, dateColumn ;
@FXML
public TableColumn<Entry, Boolean> checkColumn, buttonColumn ;
@FXML
public checkBox checkAllCheckBox ;
或者
@FXML
public 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 ;
谢谢!
【问题讨论】:
-
两个都试试 ;)
-
@Romeo 需要指出的是,
@FXML注释的您的声明public Label timerLabel = new Label();是不正确的。带有@FXML注解的引用在fxml加载时初始化,不应在外部初始化。 -
“初始化 timerLabel”是什么意思?如果 timerLabel 引用定义带有
@FXML注释,则永远不要写timerLabel = new TimerLabel()。 -
如果您的字段为
public,则实际上不需要任何@FXML注释。当然,无论如何,您都不应该将这些字段设为public;您应该将它们设为private,在这种情况下,所有@FXML注释都是必需的。但是对于现在的代码,省略注释不会有任何区别。 -
我认为是时候让 FXMLLoader 在加载时记录错误或警告 @FXML 注释字段是否已经实例化。或者在 setController() 中使用实例化的。
标签: javafx fxml fxmlloader