Java 定期更改JLabel图标
我必须每2秒更改一次jLabel的图标。我使用一个计时器和一个计时器任务来完成这个任务,但它只显示第一个图像。代码如下:Java 定期更改JLabel图标,java,swing,icons,jlabel,event-dispatch-thread,Java,Swing,Icons,Jlabel,Event Dispatch Thread,我必须每2秒更改一次jLabel的图标。我使用一个计时器和一个计时器任务来完成这个任务,但它只显示第一个图像。代码如下: ImageIcon[] icons = {new ImageIcon(this.getClass().getResource("orange.jpg")), new ImageIcon(this.getClass().getResource("cosmote.jpg")), new ImageIcon(this.getClass().get
ImageIcon[] icons = {new ImageIcon(this.getClass().getResource("orange.jpg")), new
ImageIcon(this.getClass().getResource("cosmote.jpg")), new
ImageIcon(this.getClass().getResource("vodafone.jpg"))};
java.util.Timer timer = new java.util.Timer();
int indexIcon;
然后在JFrame构造函数中:
initComponents();
open(fisierAgenda);
TimerTask task = new TimerTask() {
public void run() {
indexIcon=(indexIcon++)%3;
jLabel.setIcon(icons[indexIcon]);
jLabel.setText(""+indexIcon);
}
};
timer.schedule(task, 0, 2000);
任何帮助都将不胜感激。您应该为此使用一个线程。至少,我会这么做。
- 你对我有意见吗
- 所有活动都必须在EDT上进行
- 来自
的输出将永远不会被通知util.Timer
,对已经可见的事件调度线程
Swing GUI
- 使用,则输出将始终在EDT上完成
计时器。有关更多详细信息,请参阅。还可以看到这一点。不是向下投票者,而是对Swing GUI的所有编辑和更新都应该在EDT上。也不是向下投票者,而是:1)所有更新都应该在EDT上完成(因此最简单的事情是使用Swing计时器)2)自Java 1.5以来,最好使用执行器框架,而不是手动创建线程。3) 如果需要,您可以将执行器
和SwingUtilities.invokeLater()组合起来