Вы не должны блокировать поток приложения JavaFX. В противном случае макетирование / рендеринг приостанавливается до завершения вызова метода. Поскольку фильтры событий запускаются в потоке приложения, вам нужно переписать код и позволить обработчику завершить работу без задержки.
Для этой цели можно использовать PauseTransition
:
// Register an event filter for a single node and a specific event type
getBtn1().addEventFilter(MouseEvent.MOUSE_CLICKED,
event -> {
if (event.getSource().equals(getBtn1())) {
getBtn1().setGraphic(new ImageView(getCrossImage()));
event.consume();
PauseTransition pause = new PauseTransition(Duration.seconds(0.1));
pause.setOnFinished(evt -> getBtn2().setGraphic(new ImageView(getNoughtsImage())));
pause.play();
}
});