我想製作一個秒錶(小時:分鐘:秒),並且我認爲我應該按照以下方式來做。變量的結果將被傳遞到我在我們開始秒錶TextField
,startTime
將是時間,時間的流逝將當前時間(常量)秒錶。數秒。 javafx
result=startTime-elapsedTime;
但我不知道該用哪個日期類我也不知道如何重複這個。
result=startTime-elapsedTime;
每秒鐘爲了更新TextField。
歡迎您提出任何建議。
我想製作一個秒錶(小時:分鐘:秒),並且我認爲我應該按照以下方式來做。變量的結果將被傳遞到我在我們開始秒錶TextField
,startTime
將是時間,時間的流逝將當前時間(常量)秒錶。數秒。 javafx
result=startTime-elapsedTime;
但我不知道該用哪個日期類我也不知道如何重複這個。
result=startTime-elapsedTime;
每秒鐘爲了更新TextField。
歡迎您提出任何建議。
看看AnimationTimer類。您必須提供一種方法,然後以大約60 Hz的頻率自動調用。在那裏你可以做你的計算和GUI的更新。
可以使用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);
}
}
由於你只是在尋求對我而言過於寬泛的建議。您應該編輯具體問題的問題,那時我們可以提供幫助。 – Andrej