Не понимаю как получить 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?
null выводится потому что на момент инициализации контроллера сцена еще не существует (в главном классе сначала загружается fxml, в этот же момент инициализируется контроллер, а потом уже создается объект сцены). В момент нажатия на кнопку же окно уже полностью инициализировано, поэтому объект сцены доступен.
Можно повесить listener на sceneProperty, при его изменении выполнять нужные вам действия со сценой:
countReady.sceneProperty().addListener(((observable, oldValue, newValue) -> {
if (newValue != null) {
//
}
}));
Сборка персонального компьютера от Artline: умный выбор для современных пользователей