如何在JavaFX中使用PauseTransition方法?

时间:2015-05-30 07:38:25

标签: javafx

我读了这本书,但我仍然对暂停转换方法感到困惑。 我做了一个显示数字的标签,我希望每秒都能增加这个数字。

2 个答案:

答案 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();