在我的程序中添加一个计时器(javafx)

时间:2016-02-19 18:43:55

标签: java javafx timer counter

我正在尝试为我的程序添加一个计时器。我试过调用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;
    }
}

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

我该怎么做?对不起,不好意思。

1 个答案:

答案 0 :(得分:12)

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