如何在循环中更改JLabel的文本而不切换如此之快,用户无法看到它?

时间:2010-06-16 18:50:15

标签: java multithreading timer jlabel

我想用Java创建一个简单的时钟。代码非常简单,我将举一个例子:

for(int i=0;i<=60;i++)
   jLabel11.setText( Integer.toString(i) );

问题是当我运行我的程序时,结果没有按顺序显示每个更新。 它只显示60位数字,没有显示从1到2到3的变化......

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

问题是UI的更改应该在事件派发线程上运行,但阻止此循环(并阻止UI)将阻止屏幕重新绘制。相反,使用计时器执行定期更新,例如

Timer timer = new Timer();

ActionListener updater = new ActionListener()
{
   int count;
   public void actionPerformed(ActionEvent event) {
      jLabel11.setText( Integer.toString(count++) );
      if (count==60)
         timer.stop();
   }
}
timer.setDelay(100);
timer.addActionListener(updater);
timer.start(); 

请参阅Sun教程 - How to use Swing Timers