java - 使用 Swing 计时器更新标签

标签 java swing timer jlabel

我在使用这段代码时遇到了一些问题。

我正在使用随机数启动一个计时器,并且我想每秒更新一个带有倒计时的 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();
    }
}

最佳答案

我不太明白你的问题为什么要使用随机,但这里有一些观察结果:

I want to update a JLabel with the countdown, every second.

然后您需要将计时器设置为每秒触发一次。所以定时器的参数是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,而不仅仅是几行随机代码,以便我们能够理解代码的上下文。

关于java - 使用 Swing 计时器更新标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30417719/

相关文章:

java继承: in the parent method write code that uses child variable

javascript - node.js,setTimeout回调方法和 "this"

java - 如何停止递归

java - Jruby "RuntimeHelpers"类已弃用

java - JSP 何时使用空的 scriptlet 标签

java - 在任意位置放置形状

Java Swing setBounds() 关闭 1 像素

java - 安排给定时间的工作

c - libevent:使计时器持久化

java - 扩展 spring security UsernamePasswordAuthenticationFilter