java - 如何使用 Timeline 在 JavaFX 上每 x 秒执行一个 void 方法?

标签 java javafx

问题:

我尝试使用时间轴每 0.5 秒调用一个 void 方法 action() 。我研究了如何做到这一点,并查看了该网站上的类似问题,但没有一个适合我。

我尝试过的#1:

Duration sec = Duration.ofSeconds((long) 0.5);
this.timeline = new Timeline(new KeyFrame(sec, e -> {
    action();
}));

上面导致的错误: “构造函数 KeyFrame(Duration, ( e) -> {}) 未定义”。

我尝试过的#2:

this.timeline = new Timeline(new KeyFrame(Duration.ofSeconds((long) 0.5), new EventHandler<ActionEvent>() 
        {

            @Override
            public void handle(ActionEvent event) {
                action();
            }
            }));

上述导致的错误:“构造函数 KeyFrame(Duration, new EventHandler(){}) 未定义”。

预先感谢您的帮助。

最佳答案

基于这一行:

Duration sec = Duration.ofSeconds((long) 0.5);

注意:0.5 转换为 long 只会得到 0

您使用了错误的Duration 类。以上表明您正在使用 java.time.Duration当您需要使用javafx.util.Duration时。删除前者的导入语句并将其替换为后者的导入语句。然后将上面的行更改为:

Duration sec = Duration.seconds(0.5);

请注意,JavaFX Duration 类的静态方法名为 seconds,而不是 ofSeconds。另外,如果您希望Timeline0.5 秒重复调用您的方法,那么您需要将其设置为 cycle countAnimation#INDEFINITE .

这是一个例子:

import javafx.animation.Animation;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.util.Duration;

public class App extends Application {

  private Label label;
  private int count;

  @Override
  public void start(Stage primaryStage) {
    label = new Label();

    Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(0.5), e -> incrementLabel()));
    timeline.setCycleCount(Animation.INDEFINITE);
    timeline.playFromStart();

    primaryStage.setScene(new Scene(new StackPane(label), 500, 300));
    primaryStage.show();
  }

  private void incrementLabel() {
    label.setText(String.format("%,d", count++));
  }
}

注意:“递增”Label 的文本可以直接在 EventHandler 中完成,但我将其移至一个void方法来更好地满足您的问题。

关于java - 如何使用 Timeline 在 JavaFX 上每 x 秒执行一个 void 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58775873/

相关文章:

java - Jaxb 编码预期为 xsi :nil ="true" in the element when the value is decimal which will be null,,但 xsi:nil ="true"未出现

java - 通过 Java 建立 MySQL 表时出错

JavaFX布局对齐方式,等同于GridBagLayout

java - 在 JavaFX 中的 TableColumn 的单独线程中生成值

Java:这个数据结构叫什么?

java - 在静态中声明辅助类方法的原因是什么

java - 需要知道 VMS 日期到长整型的转换

user-interface - JavaFX CSS : How to set tabpane tabs - width, 高度

java - 如何在 Canvas 上绘制多个对象?

JavaFX 从组合框中删除单个项目