我读了这本书,但我仍然对暂停转换方法感到困惑。 我做了一个显示数字的标签,我希望每秒都能增加这个数字。
答案 0 :(得分:10)
如何使用PauseTransition
PauseTransition暂停一次。以下示例将在暂停一秒后更新标签文本:
Error 404: java.io.FileNotFoundException: SRVE0190E: File not found: /ws/hello
为什么PauseTransition不适合你
但这不是你想做的。根据您的问题,您希望每秒更新标签,而不仅仅是一次。您可以将暂停转换设置为无限循环,但这对您没有帮助,因为您无法在JavaFX 8中的循环完成时设置事件处理程序。如果PauseTransition无限循环,则转换的完成处理程序将永远不会被调用,因为过渡永远不会完成。所以你需要另一种方法来做到这一点......
您应该使用时间轴
作为suggested by Tomas Mikula,使用Timeline代替PauseTransition。
label.setText("Started");
PauseTransition pause = new PauseTransition(Duration.seconds(1));
pause.setOnFinished(event ->
label.setText("Finished: 1 second elapsed");
);
pause.play();
带定时器的替代解决方案
对于以下问题,有一个基于Timer的备用解决方案:
但是,我更喜欢基于时间轴的解决方案来解决该问题的Timer解决方案。 Timer需要一个新的线程,并且要特别注意确保在JavaFX应用程序线程上进行更新,而基于时间轴的解决方案不需要任何更新。
答案 1 :(得分:1)
由Adowarth评论:
你可以使用PauseTransition,如果你再次启动它 完成处理程序
int cycle = 0;
label.setText("Started");
PauseTransition pause = new PauseTransition(Duration.seconds(1));
pause.setOnFinished(event ->
label.setText("Finished cycle " + cycle++);
pause.play();
);
pause.play();