JavaFX. Как получить Stage на этапе инициализации контроллера

201
31 января 2020, 21:10
 @FXML
 private AnchorPane anchorPane;
 @Override
    public void initialize(URL url, ResourceBundle resourceBundle) {
        Stage currentStage = (Stage) anchorPane.getScene().getWindow();
        windowManager = new WindowManager(currentStage);
 }

В этом случае возникает NullPointerException, поскольку AnchorPane еще не загружен. Я конечно могу получить объект и не на этапе инициализации, но мне нужно создать экземпляр некого WindowManager с передачей Stage в конструктор, и желательно это сделать сразу, чем я потом буду в каждый метод добавлять проверку на то, не создан ли у меня уже WindowManager.

Вообщем, возможно есть интерфейс типа Initializable, выполняющийся после инициализации, или может можно получить Stage как-то по другому?

Answer 1

Придумал довольно интересное решение своей проблемы: в конструктор WindowManager можно передать реализацию функционального интерфейса Supplier. Таким образом мы получаем возможность вызова объекта Stage тогда, когда он уже будет доступен.

@FXML
private AnchorPane anchorPane;
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
    windowManager = new WindowManager(() -> (Stage) anchorPane.getScene().getWindow());
}
READ ALSO
Реальные достоинства Java [закрыт]

Реальные достоинства Java [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы на него можно было дать ответ, основанный на фактах и цитатах, отредактировав...

214
Как запросить и обработать таблицу

Как запросить и обработать таблицу

Начал изучать http только и хочется разобраться, можно ли своё расписание запилить с запросами к базе данных универаЕсть сайт университета,...

207
Could not find a driver for automationName 'Appium' and platformName 'Android'

Could not find a driver for automationName 'Appium' and platformName 'Android'

Я - новичок в автоматизации мобильных приложенийПомогите, пожалуйста, разобраться с возникшей ошибкой:

244
Как в Java работает объявление кода в классе?

Как в Java работает объявление кода в классе?

Я пришел из языка в PHP и мне не совсем понятно следующееЯ привык что в классе мы может лишь объявить свойства, методы, магические методы

206