JavaFXLocalTime构建秒表
下面的代码用于构建秒表。当按下按钮并从AnimationTimer调用该方法时,将设置变量sMIN和sSEC 我想知道是否有一种更简单的方法来编写这个例程,因为它看起来像意大利面条一样JavaFXLocalTime构建秒表,javafx,localtime,Javafx,Localtime,下面的代码用于构建秒表。当按下按钮并从AnimationTimer调用该方法时,将设置变量sMIN和sSEC 我想知道是否有一种更简单的方法来编写这个例程,因为它看起来像意大利面条一样 private void elapsedTIME(){ eSEC = LocalTime.now().getSecond(); if(eSEC > sSEC){ showSEC = eSEC - sSEC; } if(eSEC <= sSEC
private void elapsedTIME(){
eSEC = LocalTime.now().getSecond();
if(eSEC > sSEC){
showSEC = eSEC - sSEC;
}
if(eSEC <= sSEC){
showSEC = eSEC + (60-sSEC);
}
if(showSEC == 60 && elapsedTimeTest == true){
elapsedTimeTest = false;
}
if(showSEC == 60 && elapsedTimeTest == false ){
eMIN = LocalTime.now().getMinute();
if(eMIN > sMIN){
showMIN = eMIN - sMIN;
}
if(eMIN == 0 && eMIN != sMIN){
showMIN = 60 - sMIN;
}
if(eMIN < sMIN && eMIN != 0){
showMIN = (60-sMIN) + eMIN;
}
}
msg.setText("Elapsed Time "+showMIN+" Minutes "+(showSEC)+" Seconds");
}
private void elapsedTIME(){
eSEC=LocalTime.now().getSecond();
如果(eSEC>sSEC){
showSEC=eSEC-sSEC;
}
如果(eSEC sMIN){
showMIN=eMIN-sMIN;
}
if(eMIN==0&&eMIN!=sMIN){
showMIN=60-sMIN;
}
if(eMIN
我假设sSEC
和sMIN
是开始时的秒和分
不要单独存储它们,只需在开始时存储LocalTime
。然后,您可以执行以下操作:
LocalTime startTime ;
// ...
private void elapsedTIME(){
// Assumes startTime is set somewhere before this is invoked
long elapsedSeconds = Duration.between(startTime, LocalTime.now()).getSeconds();
long minutes = elapsedSeconds / 60 ;
long seconds = elapsedSeconds % 60 ;
msg.setText("Elapsed Time "+minutes+" Minutes "+seconds+" Seconds");
}
SSCCE:
import java.time.Duration;
import java.time.LocalTime;
import javafx.animation.AnimationTimer;
import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Stopwatch extends Application {
@Override
public void start(Stage primaryStage) {
Label stopwatch = new Label();
BooleanProperty running = new SimpleBooleanProperty(false);
AnimationTimer timer = new AnimationTimer() {
private LocalTime startTime ;
@Override
public void handle(long now) {
long elapsedSeconds = Duration.between(startTime, LocalTime.now()).getSeconds();
long minutes = elapsedSeconds / 60 ;
long seconds = elapsedSeconds % 60 ;
stopwatch.setText("Time: "+minutes +" minutes "+seconds + " seconds");
}
@Override
public void start() {
running.set(true);
startTime = LocalTime.now();
super.start();
}
@Override
public void stop() {
running.set(false);
super.stop();
}
};
Button startStop = new Button();
startStop.textProperty().bind(Bindings.when(running).then("Stop").otherwise("Start"));
startStop.setOnAction(e -> {
if (running.get()) {
timer.stop();
} else {
timer.start();
}
});
VBox root = new VBox(10, stopwatch, startStop);
root.setPadding(new Insets(24));
root.setMinWidth(240);
root.setAlignment(Pos.CENTER);
primaryStage.setScene(new Scene(root));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
请注意,如果秒表运行时时间已过午夜,则此功能可能无法正常工作;您可以使用
LocalDateTime
来解决此问题 这类问题对,,虽然。你的代码很优雅,但是如果你在59分钟启动秒表,当它经过一个周期,其中分钟是00,那么变量分钟变成-56。我的想法是,我们仍然需要一个测试,当这种情况发生时,分钟只能有两个条件0或>0,因此我在我的代码中对零的测试显示分钟,我将尝试LocalDateTime,但不确定这是否能解决问题谢谢你的帮助使用第一个版本,而不是第二个版本。(或者也可以记录时间。)