Как убрать eventHandler с кнопки в javafx?

152
22 июня 2019, 03:30
Scene scene = this.root.getScene();
scene.addEventHandler(KeyEvent.KEY_PRESSED, event -> gameManager.restartGame(event));
scene.removeEventHandler(KeyEvent.KEY_PRESSED, event -> gameManager.restartGame(event));

при таком коде во время запуска игры по идее должно пропадать действие при нажатии кнопки. Без добавления eventHandler игра не реагирует, но вот убрать его она не дает. Что может быть не так ?

scene и stage всегда остаются теми же

Answer 1

Не понятно зачем убирать обработчик, сразу после того как Вы его добавили. Ну да ладно, Бог Вам судья. А если серьезно, то Вам надо хэндлер создать отдельно, т.е. не лямбдой его передавать, а прям создать объект EventHandler.

EventHandler<KeyEvent> handler = new EventHadler<>() {
    public void handle(KeyEvent event) {
       gameManager.restartGame(event);
    }
};
scene.addEventHandler(KeyEvent.KEY_PRESSED, handler);
scene.removeEventHandler(KeyEvent.KEY_PRESSED, handler);

Я не уверен на 100%, но думаю сие поведение обусловлено именно тем, что при передаче обработчиков лямбдой, Вы получаете два разных объекта. Соответственно удаление становится проблематичным, т.к. мы не знаем какой именно хэндлер надо удалить. Когда у нас объект хэндлера будет один - мы сможем однозначно его идентифицировать и удалить.

READ ALSO
Почему веб приложения не зависимы от ос [закрыт]

Почему веб приложения не зависимы от ос [закрыт]

Заранее извиняюсь за вопросСкорее всего он глупы и некорректный

154
Исключение при загрузке FXML файлов

Исключение при загрузке FXML файлов

Изучаю JavaFX, столкнулся с такой проблемой, не могу прогрузить FXML файлы, выдает Exception in Application start method, жалуясь на строку, где происходит загрузка...

188
java.lang.NoClassDefFoundError: org/apache/commons/lang/time/FastDateFormat

java.lang.NoClassDefFoundError: org/apache/commons/lang/time/FastDateFormat

У меня по условию есть параметр который подается на вход хранимой процедурев Т/З записан как

316
Как реализовать счетчик секунд в libgdx.

Как реализовать счетчик секунд в libgdx.

Поясню : Я пишу игру файтинг1 раунд = 60 секунд

152