2015-10-17 112 views
0

所以我有一个大小为10的JButtons的数组,并且所有的文本都在“ ”内,例如我点击按钮[0],假设我想增加按钮内的值[1] - [7](我已经这样做了),但我如何添加延迟时间,使我看起来像一个动画,而不是当我点击按钮[0]时,所有其他按钮的值立即改变。如何在GUI中添加延迟时间java

我试图用其他的代码,我发现这里的堆栈溢出,如Thread.sleep代码(1000),而这个链接

http://best-programming-tricks.blogspot.com/2011/07/how-to-make-loading-delay-time-in-java.html

,当我试图在我的代码,该GUI刚刚进入一个滞后然后更改值。它不会做我想做的事情

谢谢

,这里是我的ActionListener

buttons[0].addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       int i = Integer.parseInt(buttons[0].getText()); 
       setValuetoZero(0); 
       int delay = 1000; 
        for(int a =1; a<= i; a++){ 
         int getVal = Integer.parseInt(buttons[a].getText()); 
         getVal++; 
         String newVal = Integer.toString(getVal); 
         buttons[a].setText(newVal); 
        } 
       } 

      }); 

回答

1

也许你可以使用javax.swing.Timer中的一个例子。您给构造函数一个ActionLitener以给定的时间间隔被调用。你可以把它想象成一个在每个时间间隔都被按下的隐藏按钮。

http://docs.oracle.com/javase/7/docs/api/javax/swing/Timer.html

休眠状态的原因造成滞后,这是导致该GUI运行在睡觉的线程。这意味着GUI在睡眠时无法响应输入。为了让线程进入休眠状态,您需要启动另一个线程并处理其与GUI的数据访问同步,这对您来说可能比您的操作更麻烦。这就是为什么Timer很好。它不会中断GUI并在与GUI相同的线程中执行其ActionListener。

+0

我可以将此添加到我的for循环吗? –

+0

不,我想你会想把for循环放到actionPerformed函数中,这个函数会被定时器调用。 – chasep255

+0

是我的for循环在actionPerformed函数内 –