在java的gui中特别延迟

时间:2014-02-07 23:08:25

标签: java swing

我在java中创建了这段代码,我想在这部分代码之后做出延迟,但是当我使用延迟或睡眠代码时,整个代码会在延迟时间内休眠,但我想在gui中看到这种背景变化然后拖延!!!那我该怎么办?(我用摇摆枪)

for (int i = 0; i < 8; i++) {
    for (int j = 0; j < 8; j++) {
        if (matrisBazi[i][j] == 0) {
            jb[i][j].setBackground(Color.white);
        }
        if (matrisBazi[i][j] == 1) {
            jb[i][j].setBackground(Color.red);
        }
        if (matrisBazi[i][j] == 2) {
            jb[i][j].setBackground(Color.blue);
        }
    }
}
jb[i][j].addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent event) {   
    click(s);
    }
});

我的actionPerformed void之前和之后调用click();函数和正在执行的过程如何将swing定时器代码添加到此void?! 我认为计时器在click()之前不起作用;结束。

2 个答案:

答案 0 :(得分:4)

如果这是一个Swing GUI(你没有告诉我们),你不会想要使用Thread.sleep(...)因为它会睡眠Swing事件线程并让整个应用程序进入休眠状态。相反,你会想要使用Swing Timer。

请注意,如果你要慢慢递增一个变量,你就不会使用for循环,而是直接在Timer的actionPerformed方法内增加变量。

例如:

for (int i = 0; i < MAX; i++) {
  // do some animation using i
  Thread.sleep(sleepTime);
}

将更改为:

new Timer(sleepTime, new ActionListener(){
  private int i = 0;

  public void actionPerformed(ActionEvent evt) {
    if (i >= MAX) {
      // stop the animation
    }
    // do some animation with i
    i++;
  }
}).start();

答案 1 :(得分:4)

你需要使用Swing计时器(javax.swing.Timer),因为你有一个GUI 在本教程中阅读它: How to use Swing timers