:
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();
}
はEDIT:
のコメントによると、ここ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);
}
}
出典
2016-08-02 13:43:33
jns
ので、あまりにも広いと私に見える提案を求めているだけです。あなたは特定の問題で質問を編集し、その時点で私たちが助けることができます。 – Andrej