每小时一次用新数据更新JLabel

时间:2019-04-30 15:56:30

标签: java swing

所以我目前在Java中有一个arraylist,其中包含:

{"Sam has won", "Charles has lost", "Sam has lost"}

并且在开始时,我的JLabel将显示“山姆赢了”,如下所示:

Sam has won

但是我希望能够每小时一次自动更新JLabel,并继续进行“查尔斯丢失了”。因此,一小时后,我的JLabel会将其内容更新为:请注意,对于测试,我将运行应用,并等待一小时以查看标签已更新,因为没有没有专用的更新按钮,必须按下该按钮才能进行更新,而是让应用程序每小时运行并自行更新

Charles has lost

以此类推。

到目前为止,我已经了解了 Timer类 TimerTask类,但是我很难区分两者。有人可以根据我上面的情况演示一个例子吗?

2 个答案:

答案 0 :(得分:1)

您可以使用javax.swing.Timer。受弗雷德·施瓦茨(Fred Schwarz)article启发的一个例子:

javax.swing.Timer t = new javax.swing.Timer(60 * 60 * 1000, new ActionListener() {
          public void actionPerformed(ActionEvent e) {
              //Change your label's text
              p.repaint();
          }
       });

答案 1 :(得分:1)

尝试使用javax.swing.Timer类。 您可以像这样测试它:

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.Timer;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

public class Test extends JFrame {

    private int selectedNameIndex = 0;

    public Test() {
        JLabel label = new JLabel();
        List<String> nameList = new ArrayList<>();
        nameList.add("Sam has won");
        nameList.add("Charles has lost");
        nameList.add("Sam has lost");

        Timer timer = new Timer(60 * 60 * 1000, new ActionListener() {
//        Timer timer = new Timer(100, new ActionListener() { // for test
            public void actionPerformed(ActionEvent e) {
                label.setText(nameList.get(selectedNameIndex));
                selectedNameIndex++;
                if (selectedNameIndex >= nameList.size()) {
                    selectedNameIndex = 0;
                }
            }
        });
        timer.setInitialDelay(0);
        timer.start();
        add(label);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack(); setVisible(true);
    }

    public static void main(String[] args) {
        new Test();
    }
}