Второе событие обнаруживается слишком быстро при обработке события javafx - PullRequest
0 голосов
/ 10 мая 2018

Прямо сейчас, как только пользователь нажимает первую кнопку, вторая появляется мгновенно, с потоком или без него. Есть ли лучший способ сделать это?

// 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();
            }
            if (event.isConsumed()) {
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                getBtn2().setGraphic(new ImageView(getNoughtsImage()));
            }

        });

1 Ответ

0 голосов
/ 10 мая 2018

Вы не должны блокировать поток приложения 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();
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...