Loopback 4 доступ к службе в пользовательском загрузчике

Как использовать PauseTransition

A PauseTransition для одной паузы. Следующий образец обновит текст метки после паузы в одну секунду:

label.setText("Started");
PauseTransition pause = new PauseTransition(Duration.seconds(1));
pause.setOnFinished(event ->
   label.setText("Finished: 1 second elapsed");
);
pause.play();

Почему PauseTransition не для вас

Но это не что вы хотите сделать. Согласно вашему вопросу, вы хотите обновлять ярлык каждую секунду, а не один раз. Вы можете установить переход на паузу на неопределенное время, но это не поможет вам, потому что вы не можете установить обработчик событий при завершении цикла в JavaFX 8. Если PauseTransition циклически выполняется бесконечно, обработчик завершения для перехода никогда не будет вызван потому что переход никогда не закончится. Итак, вам нужен еще один способ сделать это ...

Вы должны использовать временную шкалу

Как , предложенный Томасом Микулой используйте Timeline вместо PauseTransition.

label.setText("Started");
final IntegerProperty i = new SimpleIntegerProperty(0);
Timeline timeline = new Timeline(
    new KeyFrame(
        Duration.seconds(1),
        event -> {
            i.set(i.get() + 1);
            label.setText("Elapsed time: " + i.get() + " seconds");
        } 
    )
);
timeline.setCycleCount(Animation.INDEFINITE);
timeline.play();

Альтернативное решение с таймером

Существует альтернативное решение на основе на Timer для следующего вопроса:

Тем не менее, я предпочитаю решение Timeline для решения Timer из этого вопроса. Таймер требует новый поток и дополнительную осторожность в обеспечении обновлений в потоке приложений JavaFX, а решение на основе временной шкалы не требует этого.

0
задан pessato 2 March 2019 в 14:42
поделиться

0 ответов

Другие вопросы по тегам:

Похожие вопросы: