gpt4 book ai didi

Java Swing 使用日期作为计时器

转载 作者:行者123 更新时间:2023-12-02 01:07:00 25 4
gpt4 key购买 nike

尝试制作一个计时器,显示自按下按钮以来所耗时。我正在使用 Date 实例,并尝试将其初始化为 00:00:00 并使其按秒、分钟、然后小时增加。如果我没有在 Date currentTime = new date() 中输入任何值,它就只是当前时间的时钟这是我的代码,我尝试将日期设置为全 0 值,并且它显示为全零,但是当按下我的按钮时,它不再充当计时器。有什么问题吗?

 Timer timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Date currentTime = new Date(0,0,0,0,0,0);
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
laserOnTimeTF.setText(sdf.format(currentTime));
}
});

laserOnOff.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (!laserSetting) {
timer.start();
laserSetting = true;
laserOnOff.setText("Laser On");
} else {
timer.stop();
laserSetting = false;
laserOnOff.setText("Laser Off");
}

}
});

最佳答案

那个 Date 构造函数 is deprecated ,与所有 Date 构造函数一样,除了采用毫秒参数的构造函数之外。 API 被弃用是有原因的,通常是因为它们不能按预期工作。要在使用已弃用的 API 时收到通知,请在 IDE 中打开所有编译器警告,并注意这些警告。

日期不太适合存储耗时,因为它代表绝对时间点。旨在表示时间差的类是 java.time.Duration .

您可以根据两个时间值计算持续时间。最简单的时间值可能是 Instant ,因此您需要在类中创建一个 Instant 类型的私有(private)字段,该字段创建 Timer 并向按钮添加监听器,以跟踪按下按钮的时间:

private Instant timeOfLastButtonPress;

然后您可以在每次实际按下按钮时初始化它:

laserOnOff.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (!laserSetting) {
timeOfLastButtonPress = Instant.now();
timer.start();
laserSetting = true;
laserOnOff.setText("Laser On");
} else {
timer.stop();
laserSetting = false;
laserOnOff.setText("Laser Off");
}
}
});

最后,您的计时器可以使用 Duration.between 计算持续时间:

Duration elapsedTime =
Duration.between(timeOfLastButtonPress, Instant.now());

如果您使用的是 Java 9 或更高版本,您可以直接从 Duration 中提取数字:

Timer timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Duration elapsedTime =
Duration.between(timeOfLastButtonPress, Instant.now());
laserOnTimeTF.setText(String.format("%02d:%02d:%02d",
elapsedTime.toHoursPart(),
elapsedTime.toMinutesPart(),
elapsedTime.toSecondsPart()));
}
});

在 Java 8 中,您需要自己计算:

Timer timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Duration elapsedTime =
Duration.between(timeOfLastButtonPress, Instant.now());
laserOnTimeTF.setText(String.format("%02d:%02d:%02d",
elapsedTime.toHours(),
elapsedTime.toMinutes() % 60,
elapsedTime.getSeconds() % 60));
}
});

关于Java Swing 使用日期作为计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59888238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com