簡體   English   中英

JavaFX:達到零時如何停止時間線倒計時計時器

[英]JavaFX: How to stop Timeline countdown timer when zero is reached

我有這段代碼顯示從 10 開始倒計時:

在此處輸入圖像描述

但是,在達到零后它會繼續計入負數。 達到零后如何停止? 這樣 label 上顯示的最后一個文本是0

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

public class TestCountdown extends Application {
    private GridPane gridPane;
    private Scene scene;

    private Button button = new Button("Start");
    private CountdownTimer timer = new CountdownTimer();

    @Override
    public void start(Stage applicationStage) {
        gridPane = new GridPane();
        scene = new Scene(gridPane);

        gridPane.add(timer, 0, 1);
        gridPane.add(button, 0, 2);

        timer.setStyle("-fx-font-size: 50;");
        button.setStyle("-fx-font-size: 50;");

        button.setOnAction(actionEvent -> timer.start());

        applicationStage.setScene(scene);
        applicationStage.setFullScreen(true);
        applicationStage.show();
    }
}

class CountdownTimer extends Label {
    private int i = 10;

    private boolean started;

    public CountdownTimer() {
        setText("10");
    }

    public void start() {
        if (started)  {
            return;
        }

        Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(0),
                event -> {
                    setText(String.valueOf(i--));

                    if (i <= 0)  {
                        timeline.stop(); //ERROR: variable timeline might not have been initialized
                    }
                }),
                new KeyFrame(Duration.seconds(1)));

        timeline.setOnFinished(event -> System.out.println("Done!"));
        timeline.setCycleCount(Animation.INDEFINITE);
        timeline.play();
 
        started = true;
    }
}

編輯

在此處輸入圖像描述

編輯:上面的代碼已更新:

 if (i <= 0)  {
                        timeline.stop(); //ERROR: variable timeline might not have been initialized
                    }


如果塊給出

ERROR: variable timeline might not have been initialized

錯誤

不要在構造函數中添加,而是嘗試在時間軸初始化后添加關鍵幀。

Timeline timeline = new Timeline();
KeyFrame kf = new KeyFrame(Duration.seconds(0),
        event -> {
            setText(String.valueOf(i--));
            if (i <= 0) {
                timeline.stop();
            }
        });
timeline.getKeyFrames().addAll(kf, new KeyFrame(Duration.seconds(1)));

暫無
暫無

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

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