添加计时器到我的程序(javafx)[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了添加计时器到我的程序(javafx)[重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我正在尝试为我的程序添加一个计时器。我试过调用java.util.Timer,但它让我感到沮丧,因为我不完全理解它背后的概念。我刚刚在python中完成了一个学期的编码,但这对我来说是完全不同的。

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Text;
import javafx.stage.Stage;

import java.awt.event.ActionListener;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class main extends Application implements EventHandler<ActionEvent>{

    Button button;
    Button button2;
    Counter counter = new Counter(0);
    Counter timecounter = new Counter(0);
    Text text_counter = new Text(counter.S_count.get());
    Text text_timecounter = new Text(timecounter.S_count.get());

    Date currdate = new Date();
    int currsec = currdate.getSeconds();


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


    }


    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setTitle("Counter Window");

        button = new Button();
        button2 = new Button();
        button.setText("Reset");
        button.setOnAction(this);
        button2.setText("Tick");
        button2.setOnAction(this);
        button.setTranslateY(-120);
        button2.setTranslateY(-80);
        text_counter.textProperty().bind(counter.S_count);
        text_timecounter.textProperty().bind(timecounter.S_count);
        text_timecounter.setTranslateX(-100);



        StackPane layout = new StackPane();
        layout.getChildren().add(button);
        layout.getChildren().add(button2);
        layout.getChildren().add(text_counter);
        layout.getChildren().add(text_timecounter);

        Scene scene = new Scene(layout, 360,280);
        primaryStage.setScene(scene);

        primaryStage.show();
    }

    @Override
    public void handle(ActionEvent event) {
        if(event.getSource()==button){
            counter.Reset();
        }
        if(event.getSource()==button2){
            counter.Tick();
        }
    }
}

我用python在python中构建了一个程序。我想通过在循环中添加一个检查“脏”方法来检查当前日期的秒数是否已经改变,如果有,则将值增加1。

class timerclass {
    Timer timer1;
    private int timecounter = 0;

    TimerTask Task1 = new TimerTask() {
        @Override
        public void run() {
            setTimecounter(getTimecounter()+1);
        }
    };

    public timerclass(){
        timer1 = new Timer();

    }

    public int getTimecounter() {
        return timecounter;
    }

    public void setTimecounter(int timecounter) {
        this.timecounter = timecounter;
    }
}

这是我创建新计时器的程度。我明白我必须创建一个任务并安排它到计时器,但我没有丝毫的线索如何......

我该怎么做?很抱歉给您带来不便。

答案

Timer用于安排任务..所以你在哪里写这些任务?那你必须在TimerTask班写这些任务......

困惑?让我分解一下,

Timer timer = new Timer();

现在你已经创建了一个Timer类的对象..现在你必须做一些正确的任务吗?所以要做到这一点创建一个TimerTask的对象。

TimerTask task = new TimerTask()
{
        public void run()
        {
            //The task you want to do       
        }

};

现在您已经创建了一个任务,您应该在run方法中定义要执行的任务。

为什么我自己编写了一个TimerTask类?那是因为TimerTask是一个带有三个方法的抽象类..所以你需要定义你想要使用的方法..

现在安排任务

timer.schedule(task,5000l);

注意5000之后的'l'。它表示长数据类型,因为schedule方法被定义为

void schedule(TimerTask task,long milliseconds)

供进一步参考

https://docs.oracle.com/javase/7/docs/api/java/util/Timer.html

https://docs.oracle.com/javase/7/docs/api/java/util/TimerTask.html

以上是关于添加计时器到我的程序(javafx)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

JavaFX 动态添加新的文本字段

JavaFX不会连接到MYSQL [重复]

JavaFX,标签setText中的倒数计时器

添加了 JavaFX 重复系列

iOS应用程序中的自定义字体[重复]

使用JAVAFX和SWING有啥区别[重复]