JavaFX FXML控制器-构造函数VS初始化方法

JavaFX FXML控制器-构造函数VS初始化方法

我的Application类如下所示:

public class Test extends Application {

    private static Logger logger = LogManager.getRootLogger();

    @Override
    public void start(Stage primaryStage) throws Exception {

        String resourcePath = "/resources/fxml/MainView.fxml";
        URL location = getClass().getResource(resourcePath);
        FXMLLoader fxmlLoader = new FXMLLoader(location);

        Scene scene = new Scene(fxmlLoader.load(), 500, 500);

        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }}

这个FXMLLoader创建相应控制器的实例(在FXML文件通过fx:controller)首先调用默认构造函数,然后调用initialize方法:

public class MainViewController {

    public MainViewController() {
        System.out.println("first");
    }

    @FXML
    public void initialize() {
        System.out.println("second");
    }}

产出如下:

first
second

那么,为什么initialize方法存在吗?使用构造函数与initialize方法来初始化控制器所需的东西?

谢谢你的建议!


汪汪一只猫
浏览 1798回答 3
3回答

慕尼黑5688855

一句话:首先调用构造函数,然后调用任意构造函数。@FXML然后填充带注释的字段。initialize()叫做。因此构造函数无法访问@FXML引用.fxml文件中定义的组件的字段,而initialize()确实能接触到他们。引用FXML简介:[.]控制器可以定义一个初始化()方法,当相关文档的内容完全加载时,该方法将在实现控制器上调用一次[.]这允许实现类对内容执行任何必要的后处理。

莫回无

这个initialize方法被调用。@FXML已向附加说明的成员进行了注射。假设您有一个要填充数据的表视图:class&nbsp;MyController&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;@FXML &nbsp;&nbsp;&nbsp;&nbsp;TableView<MyModel>&nbsp;tableView;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;MyController()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tableView.getItems().addAll(getDataFromSource());&nbsp;//&nbsp;results&nbsp;in&nbsp;NullPointerException,&nbsp;as&nbsp;tableView&nbsp;is&nbsp;null&nbsp;at&nbsp;this&nbsp;point.&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;@FXML &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;initialize()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tableView.getItems().addAll(getDataFromSource());&nbsp;//&nbsp;Perfectly&nbsp;Ok&nbsp;here,&nbsp;as&nbsp;FXMLLoader&nbsp;already&nbsp;populated&nbsp;all&nbsp;@FXML&nbsp;annotated&nbsp;members.&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java