每个声明都需要@FXML吗?

每个声明都需要@FXML吗?

每个声明都需要@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 ;

谢谢!


SMILET
浏览 3222回答 3
3回答

慕尼黑8549860

所述@FXML注释使得能够FXMLLoader注入以FXML文件中定义的值转换为在控制器类的引用。换句话说,如果你的注释timerLabel用@FXML,那么它将会被初始化FXMLLoader时的load()方法是通过与FXML文件中的元素叫fx:id="timerLabel"。正如其他人在评论中指出的那样,这意味着你永远不应该写代码@FXMLprivate&nbsp;Label&nbsp;timerLabel&nbsp;=&nbsp;new&nbsp;Label();这里timerLabel将首先初始化为new Label();您在代码中创建的内容,然后几乎立即重新初始化为FXML文件中定义的值。这至多是多余的,最糟糕的是误导。如果未正确匹配变量名称,则fx:id变量将引用错误,Label并且很难跟踪错误。要了解您的实际问题:当FXMLLoader加载FXML文件时,它将尝试将具有fx:id属性的任何元素注入控制器。它会寻找public具有与fx:id属性匹配的变量名称的任何字段,或任何public具有与使用fx:id注释的属性匹配的变量名称的字段(或不具有)@FXML。因此,在您的示例中,由于您的所有字段都是public,您可以省略所有@FXML注释(即使是第一个),它仍然可以工作。但是,如果您遵循良好做法并制作字段private,则必须注释每个声明@FXML以使注入工作。所以@FXMLprivate&nbsp;Label&nbsp;timerLabel;@FXMLprivate&nbsp;TextField&nbsp;mainTextField;等会起作用,但是@FXMLprivate&nbsp;Label&nbsp;timerLabel;private&nbsp;TextField&nbsp;mainTextField;将不会。

波斯汪

为每个人fx:id="somename"你需要一个@FXMLpublic&nbsp;SomeClass&nbsp;somename;我更喜欢把它写成一行,因为当有很多时候它更容易阅读@FXML&nbsp;public&nbsp;SomeClass&nbsp;somename;没有初始化@FXMLpublic&nbsp;Label&nbsp;timerLabel&nbsp;=&nbsp;new&nbsp;Label();&nbsp;//&nbsp;this&nbsp;is&nbsp;wrong

繁星点点滴滴

@FXMLprivate&nbsp;TextField&nbsp;idTextField;@FXMLprivate&nbsp;TextField&nbsp;passwordTextField;要么@FXMLprivate&nbsp;TextField&nbsp;idTextField,&nbsp;passwordTextField;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java