gpt4 book ai didi

JavaFx 时间轴 - 设置初始延迟

转载 作者:搜寻专家 更新时间:2023-11-01 01:43:52 26 4
gpt4 key购买 nike

我最近开始使用 JavaFx 2.0,也许我的问题很基本,但目前我不知道如何解决它。例如,假设我有一个名为 Clock 的小型演示应用程序:

import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.HBox;
import javafx.scene.layout.HBoxBuilder;
import javafx.scene.text.Font;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import javafx.util.Duration;

import java.util.Date;

public class ClockDemo extends Application {

public static void main(String[] args) {
launch(args);
}

@Override
public void start(Stage stage) throws Exception {
final Label label = new Label(new Date().toString());
label.setFont(new Font("Arial", 18));
final Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(5), new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
label.setText(new Date().toString());
}
}));
timeline.setCycleCount(Timeline.INDEFINITE);

Button button = new Button("Start");
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
timeline.play();
}
});

stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent windowEvent) {
timeline.stop();
}
});
HBox hBox = HBoxBuilder.create()
.spacing(5.0)
.padding(new Insets(5, 5, 5, 5))
.children(label, button)
.build();

Scene scene = new Scene(hBox, 330, 30);
stage.setScene(scene);
stage.setTitle("Clock demo");
stage.show();
}
}

基本上,如果您单击开始按钮,Timeline 将每 5 秒更新一次 Label 中的时间。但我面临的问题是,当我单击开始按钮时,我必须等待 5 秒,直到 Timeline 开始运行并更新 Label 中的时间。那么,有什么办法可以消除这个初始延迟时间吗?

最佳答案

我遇到了同样的问题,我通过在 timeline 的开头添加一个带有 Duration.ZEROKeyFrame 解决了这个问题,并添加了我的对其执行操作,第二个 KeyFrame 负责延迟。

final Timeline timeline = new Timeline(new KeyFrame(Duration.ZERO, new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
label.setText(new Date().toString());
}
}) , new KeyFrame(Duration.seconds(5)));

关于JavaFx 时间轴 - 设置初始延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18304208/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com