如何在JavaFX中使用PauseTransition方法?
我读了这本书,但我仍然对暂停转换方法感到困惑。 我制作了一个显示数字的标签,我希望该数字每秒钟增加一次。如何使用暂停转换 A表示一次性暂停。以下示例将在暂停一秒钟后更新标签文本:如何在JavaFX中使用PauseTransition方法?,javafx,Javafx,我读了这本书,但我仍然对暂停转换方法感到困惑。 我制作了一个显示数字的标签,我希望该数字每秒钟增加一次。如何使用暂停转换 A表示一次性暂停。以下示例将在暂停一秒钟后更新标签文本: label.setText("Started"); PauseTransition pause = new PauseTransition(Duration.seconds(1)); pause.setOnFinished(event -> label.setText("Finished: 1 second
label.setText("Started");
PauseTransition pause = new PauseTransition(Duration.seconds(1));
pause.setOnFinished(event ->
label.setText("Finished: 1 second elapsed");
);
pause.play();
为什么暂停转换不适合你
但这不是你想做的。根据您的问题,您希望每秒钟更新一次标签,而不是仅更新一次。您可以将暂停转换设置为无限期循环,但这对您没有帮助,因为您无法在JavaFX8中设置循环完成时的事件处理程序。如果PauseTransfion无限期循环,则将永远不会调用转换的完成处理程序,因为转换将永远不会完成。所以你需要另一种方法来做到这一点
你应该使用时间线
如所示,使用暂停转换而不是暂停转换
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();
带定时器的替代解决方案
对于以下问题,有一种基于a的替代解决方案:
完整地说,如果您在finish处理程序中再次启动PauseTransition,那么可以使用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();