gpt4 book ai didi

java - 如何更新耗时

转载 作者:行者123 更新时间:2023-11-30 08:21:48 25 4
gpt4 key购买 nike

我正在开发一个程序,它会计算点击按钮前的时间我在使用 Timer 时遇到问题。我想有类似的东西00:00:00 -> 00:00:01 -> 00:00:02 ... 等等我的问题是

它停留在 00:00:01

这是我的代码

Timer timer=new Timer(1000,null);


JLabel time=new JLabel("00:00:00");
timer.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
DecimalFormat df=new DecimalFormat("00");
int h=0;
int m=0;
int s=0;
s++;
if(s==60)
{
m++;
if(m==60)
{
h++;
}
}
time.setText(df.format(h)+":"+df.format(m)+":"+df.format(s));
revalidate();
repaint();
}
});
timer.start();

最佳答案

您已在 ActionListener 的上下文中将您的变量声明为局部变量...

@Override
public void actionPerformed(ActionEvent e)
{
DecimalFormat df=new DecimalFormat("00");
int h=0;
int m=0;
int s=0;

这意味着每次 actionPerformed 变量都重置为 0...

试着让它们成为实例变量...

例如,您也不会在变量超过限制时重置变量...

s++;
if (s >= 60) {
s = 0;
m++;
if (m >= 60) {
h++;
m = 0;
}
}

作为替代方案,您可以维护一个计数器,它作为已经过去的秒数,并使用一些模块数学来计算时间部分

private int count = 0;

//...

Timer timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
count++;

int hours = count / (60 * 60);
float remainder = count % (60 * 60);
float mins = remainder / (60);
remainder = remainder % (60);
float seconds = remainder;

DecimalFormat df=new DecimalFormat("00");
time.setText(df.format(hours) + ":" + df.format(mins) + ":" + df.format(seconds));

}
});
timer.start();

这让事情变得更简单,因为您正在管理一个值,然后决定如何最好地格式化它,而不是管理三个状态......恕我直言

关于java - 如何更新耗时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24924986/

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