当前位置: 首页 > 面试题库 >

使用Swing计时器更新标签

朱保赫
2023-03-14
问题内容

我在这段代码上遇到了麻烦。

我正在使用一个随机数启动一个计时器,并且我想每秒倒数一次更新JLabel。但是我还没有弄清楚该怎么做,因为计时器触发的唯一侦听器位于它的末尾(我知道)。

这是代码:

int i = getTimer(maxWait);
te1 = new Timer(i, this);
label.setText(i+"");
te1.start();

...

public int getTimer(int max){
    Random generator = new Random();
    int i = generator.nextInt(max);
    return i*1000;
}

...

public void actionPerformed(ActionEvent ev){
    if(ev.getSource() == te1){
        label.setText(i+"");
        te1.stop();
    }
}

问题答案:

我不太了解您为什么使用随机数的问题,但以下是一些观察结果:

我想每秒钟更新一次带有倒计时的JLabel。

然后,您需要将计时器设置为每秒触发一次。因此,计时器的参数是1000,而不是一些随机数。

另外,在您的actionPerformed()方法中,您将在首次触发计时器时停止计时器。如果您要进行某种倒计时,则只有在时间到0时才停止计时器。

这是一个使用计时器的简单示例。它只是每秒更新一次时间:

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.Timer;

public class TimerTime extends JPanel implements ActionListener
{
    private JLabel timeLabel;

    public TimerTime()
    {
        timeLabel = new JLabel( new Date().toString() );
        add( timeLabel );

        Timer timer = new Timer(1000, this);
        timer.setInitialDelay(1);
        timer.start();
    }

    @Override
    public void actionPerformed(ActionEvent e)
    {
        //System.out.println(e.getSource());
        timeLabel.setText( new Date().toString() );
    }

    private static void createAndShowUI()
    {
        JFrame frame = new JFrame("TimerTime");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( new TimerTime() );
        frame.setLocationByPlatform( true );
        frame.pack();
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }
}

如果您需要更多帮助,请使用适当的SSCCE演示问题来更新您的问题。所有问题均应具有适当的SSCCE,而不仅仅是几行随机的代码,以便我们可以理解代码的上下文。



 类似资料:
  • 我想在我的应用程序中添加一个时钟,它告诉你已经做了多长时间的任务。为了简化它,我包含了一个计数器,它在新线程中每秒递增一次,并用计数器号更新标签“Set Timer”。为此,我在我的.fxml文件中有一个标签fx:id=“settimer”,并将其导入到我的类中。 我试过很多方法来解决我的问题,但我还没有找到正确的方法。我对我想做什么的想法应该很清楚,如果有人能帮助我,我会很高兴的。我的问题是更新

  • 问题内容: 我正在使用Swing 使某个自定义内容在特定时间出现。我希望用户可以选择单击“隐藏”按钮,以关闭该通知并使一个小时后返回。我该如何实现? 问题答案: 有初步的延迟;只需将其设置为即可。调用后一个小时,您将被呼叫。 附录:这是一个按钮示例,该按钮在指定的时间段内隐藏了它的封闭窗口。

  • 目前,我正在尝试使用SwingWorker构建Swing应用程序,以不断更新面板。 我想在这里完成的是从数据库加载数据,每个数据都将作为面板中的图标发布。图标的颜色基于严重程度字段的值。例如: 示例数据在这张图片中,我有12个对象_id A001的数据。doInBackground()方法中的函数将循环12次,并调用publish()函数在面板中显示图标。图标的颜色基于每个对象id的严重性字段的最

  • 问题内容: 我正在使用计时器来创建秒表。计时器通过增加整数值来工作。然后,我想通过不断更新textview在活动中显示此值。 这是我在服务中尝试更新活动的textview的代码: 我在错误的线程中更新UI时遇到某种错误。 如何调整我的代码以完成不断更新textview的任务? 问题答案: 上面的代码可以工作… 注意:必须在您的主线程中创建处理程序,以便您可以修改UI内容。

  • 问题内容: 我现在正在查看文本,我想每秒使用一次警报来更新该文本。 这是我完成的代码。 问题答案: 我已经设法使用警报来更新文本。 我已声明日期,因此只要使用警报文本更改日期,日期也会更新。

  • 问题内容: 我正在更新我的Kubernetes容器: 以下是我的service.yaml: 以下是我的deployment.yaml: 第一次可以正常运行,但是在随后的运行中,我的广告连播没有得到更新。 我已经在https://github.com/kubernetes/kubernetes/issues/33664上阅读了建议的解决方法,该方法是: 我能够运行上面的命令,但是它没有为我解决问题。