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

11 浏览
0 Comments

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通过首先调用默认构造函数,然后调用initialize方法来创建对应控制器的实例(在FXML文件中通过fx:controller指定):

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

输出结果为:

first
second

那么,为什么会存在initialize方法?使用构造函数和initialize方法来初始化控制器有什么区别?

感谢您的建议!

0