簡體   English   中英

如何使用時間軸在 JavaFX 上每 x 秒執行一次 void 方法?

[英]How to use Timeline to perform a void method every x seconds on JavaFX?

問題:

我正在嘗試使用 Timeline 每 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 class。 以上表明當您需要使用java.time.Duration時,您正在使用javafx.util.Duration 刪除前者的 import 語句,並用后者替換它。 然后將上面的行更改為:

Duration sec = Duration.seconds(0.5);

注意 JavaFX Duration class 的 static 方法被命名為seconds ,而不是ofSeconds 此外,如果您希望Timeline0.5秒重復調用您的方法,則需要將其循環計數設置為Animation#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方法以更好地滿足您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM