Не могу получить Scene в initialize JavaFx

Не понимаю как получить Scene, для того, чтобы получить действие клавиатуры

@FXML
private Label countLives;

@FXML
private Circle enemyCircle;

@FXML
private Circle myCircle;

@FXML
void initialize() {

    countLives.getScene().setOnKeyPressed(key -> {
        switch (key.getCode()) {
            case W:
                myCircle.setCenterX(myCircle.getCenterX() + 1);
        }
    });

}

Здесь countLives.getScene() выдает Null, но вот с кнопкой работает иначе, почему-то после нажатия у нее появляется Scene

void initialize(){
        labelNick.setText(client.getName());
        countReady.setText("1/10");
        System.out.println(buttonReady.getScene());
        buttonReady.setOnAction(event -> {
            buttonReady.getScene().getWindow().hide();
        }

Как в этом примере. В общем вопрос заключается в том, как мне получить в контроллере Scene?


Ответы (1 шт):

Автор решения: insolor

null выводится потому что на момент инициализации контроллера сцена еще не существует (в главном классе сначала загружается fxml, в этот же момент инициализируется контроллер, а потом уже создается объект сцены). В момент нажатия на кнопку же окно уже полностью инициализировано, поэтому объект сцены доступен.

Можно повесить listener на sceneProperty, при его изменении выполнять нужные вам действия со сценой:

countReady.sceneProperty().addListener(((observable, oldValue, newValue) -> {
    if (newValue != null) {
        // 
    }
}));
→ Ссылка