Java 任务计划,共享表单标签变量

Java 任务计划,共享表单标签变量,java,javafx,time,task,Java,Javafx,Time,Task,我正在用JavaFX编写一些简单的程序。我是爪哇的乞丐。 我想做, 您填写文本框(时间以分钟为单位)并运行它。 然后运行timer.schedule,它将每分钟随时间刷新标签。类似秒表的东西。 (你把时间设定在你想记住的地方) 我有控制器 public class Controller implements Initializable { @FXML public Label label; @FXML private TextField timeEnd;

我正在用JavaFX编写一些简单的程序。我是爪哇的乞丐。 我想做, 您填写文本框(时间以分钟为单位)并运行它。 然后运行timer.schedule,它将每分钟随时间刷新标签。类似秒表的东西。 (你把时间设定在你想记住的地方)

我有控制器

public class Controller implements Initializable  {

    @FXML
    public Label label;

    @FXML
   private TextField timeEnd;
    .
    .
和方法onClick

@FXML
private void handleButtonAction(ActionEvent event) {
    Integer timeEndVal = Integer.parseInt(timeEnd.getText());
    Date startDate = new Date();
    Date endDate = new Date();
    endDate.setTime(startDate.getTime() + (timeEndVal * 60000));

    Timer timer = new Timer();
    timer.schedule(new TimerTask() {

        @Override
        public void run() {
            long currentMinutes = currentTime().getTime() - startDate.getTime();

            System.out.println(currentMinutes / 60000 + " / " + timeEndVal + " min");
            label.setText(String.valueOf(currentMinutes / 60000 + " / " + timeEndVal + " min"));


        }
    }, 0, 60000);
但我不知道,我是如何将
标签
变量设置为
定时器。时间表

我做错了什么。感谢您的帮助。

这是一个非
控制器
版本,您可以使用它从中获得一些想法。我建议您使用
时间线
而不是
计时器
。这不是一个完整的程序

import java.util.concurrent.atomic.AtomicInteger;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Duration;

/**
 *
 * @author blj0011
 */
public class JavaFXApplication267 extends Application
{

    @Override
    public void start(Stage primaryStage)
    {
        AtomicInteger timeInSeconds = new AtomicInteger();
        TextField textField = new TextField();
        Label label = new Label(Integer.toString(timeInSeconds.get()));
        Button btn = new Button("Play");

        textField.setPromptText("Enter the number of minutes");
        textField.textProperty().addListener((obs, oldValue, newValue) -> {
            //This assume the input is corret!
            timeInSeconds.set(Integer.parseInt(newValue) * 60);//Number of minutes times 60 seconds
            label.setText(getMinsSeconds(timeInSeconds.get()));
        });

        Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(1), (event) -> {
            if (timeInSeconds.get() > 0) {
                label.setText(getMinsSeconds(timeInSeconds.decrementAndGet()));
            }
        }));
        timeline.setCycleCount(Timeline.INDEFINITE);

        btn.setOnAction((ActionEvent event) -> {
            switch (btn.getText()) {
                case "Play":
                    timeline.play();
                    btn.setText("Pause");
                    textField.setEditable(false);
                    break;
                case "Pause":
                    timeline.pause();
                    btn.setText("Play");
                    textField.setEditable(true);
                    break;
            }
        });

        VBox root = new VBox(label, btn, textField);

        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
        launch(args);
    }

    String getMinsSeconds(int seconds)
    {
        return String.format("%02d:%02d", (seconds / 60), (seconds % 60));
    }
}

非常感谢,这是我发现的。非常感谢。