跑表。数秒。 JavaFX的

时间:2016-08-02 10:16:43

标签: java javafx stopwatch

我想制作秒表(小时:分钟:秒),我想我应该按照以下方式进行。变量结果将传递到我的TextFieldstartTime将是我们启动秒表的时间,传递的时间将是当前时间(常量)。

result=startTime-elapsedTime;

但我不知道要使用哪个日期类,而且我不知道如何重复这个。

每秒

result=startTime-elapsedTime;以更新TextField。

欢迎所有建议。

2 个答案:

答案 0 :(得分:1)

您可以使用TimeLine动画来更新TextField

 public void startTimer() {
        timeline = new Timeline(
            new KeyFrame(Duration.seconds(0),
                e ->advanceDuration()),
            new KeyFrame(Duration.seconds(1)));
        timeline.setCycleCount(Animation.INDEFINITE);
        timeline.play();
    }

  private void advanceDuration() {
        if (seconds < 59) {
            seconds++;
        } else {
            seconds = 0;
            if (minutes < 59) {
                minutes++;    
            }else{
                minutes = 0;
                hours++;
            }
        }
        updateDisplay();
    }

修改

根据评论,这是使用AnimationTimer

的解决方案
public class Timer extends Application {

    private AnimationTimer timer;
    private Label          lblTime = new Label("0 .s");
    private int            seconds;

    @Override
    public void start(Stage primaryStage) {
        timer = new AnimationTimer() {

        private long lastTime = 0;

        @Override
        public void handle(long now) {
            if (lastTime != 0) {
                if (now > lastTime + 1_000_000_000) {
                    seconds++;
                    lblTime.setText(Integer.toString(seconds) + " .s");
                    lastTime = now;
                }
            } else {
                lastTime = now;

            }
        }

        @Override
        public void stop() {
            super.stop();
            lastTime = 0;
            seconds = 0;
        }
    };

    Button btnStart = new Button("START");
    btnStart.setOnAction(e ->
    {
        lblTime.setText("0 .s");
        timer.start();
    });

    Button btnStop = new Button("STOP");
    btnStop.setOnAction(e -> timer.stop());


        VBox box = new VBox(16, lblTime, btnStart, btnPause);
        box.setAlignment(Pos.CENTER);

        primaryStage.setScene(new Scene(new StackPane(box)));
        primaryStage.show();
    }

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

答案 1 :(得分:0)

看一下AnimationTimer类。您必须提供一种方法,然后以大约60 Hz的频率自动调用。在那里,您可以进行GUI的计算和更新。