所以我目前在Java中有一个arraylist,其中包含:
{"Sam has won", "Charles has lost", "Sam has lost"}
并且在开始时,我的JLabel将显示“山姆赢了”,如下所示:
Sam has won
但是我希望能够每小时一次自动更新JLabel,并继续进行“查尔斯丢失了”。因此,一小时后,我的JLabel会将其内容更新为:请注意,对于测试,我将运行应用,并等待一小时以查看标签已更新,因为没有没有专用的更新按钮,必须按下该按钮才能进行更新,而是让应用程序每小时运行并自行更新。>
Charles has lost
以此类推。
到目前为止,我已经了解了 Timer类和 TimerTask类,但是我很难区分两者。有人可以根据我上面的情况演示一个例子吗?
答案 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();
}
}