#javafx #model-view-controller
Вопрос:
Я пытаюсь вызвать функцию setTodos, которая находится в контроллере OverviewController. Когда я пытаюсь сделать это таким образом, это не работает, потому что контроллер равен нулю. Кто-нибудь знает, в чем здесь может быть проблема? (не очень много знаю о JavaFX…)
@Override
public void start(Stage primaryStage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("view/JavaTodoApp.fxml"));
primaryStage.setTitle("JavaTodoApp");
primaryStage.setScene(new Scene(root, 600, 500));
primaryStage.show();
// access to controller
FXMLLoader loader = new FXMLLoader();
loader.setLocation(Main.class.getResource("view/JavaTodoApp.fxml"));
OverviewController controller = loader.getController();
controller.setTodos(this);
}
Комментарии:
1. можете ли вы показать свой файл fxml, я думаю, вы неправильно установили контроллер в файле fxml
2. Контроллер не создается до тех пор, пока не будет загружен FXML. Нет смысла вызывать методы на контроллере, который ничем не управляет.
3. В FXML-файле подключен контроллер. Откроется окно, а затем я попытаюсь получить данные в своем представлении списка с помощью метода setTodos. Какие-нибудь другие решения?
Ответ №1:
Вам нужно загрузить FXML из FXMLLoader
созданного вами экземпляра, а не из статического метода.
@Override
public void start(Stage primaryStage) throws Exception {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(Main.class.getResource("view/JavaTodoApp.fxml"));
Parent root = loader.load();
OverviewController controller = loader.getController();
controller.setTodos(this);
primaryStage.setTitle("JavaTodoApp");
primaryStage.setScene(new Scene(root, 600, 500));
primaryStage.show();
}