我在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()之前不起作用;结束。
答案 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