我的画布上有三个矩形。我想改变三个矩形的颜色 以缓慢的方式一个接一个地。 例如:启动应用程序时,用户应该能够看到三个颜色相同的矩形(蓝色)。 2个secons后,矩形颜色应变为红色。 在2个secons之后,下一个矩形颜色应该改变。 最后一个也是以相同的方式完成,这意味着在第二个矩形的2秒之后。
我以自己的方式写作。但它没有用。所有的矩形都一起改变。我想一个接一个。
任何人都可以给我逻辑。
final Runnable timer = new Runnable() {
public void run() {
//list of rectangles size =3; each contain Rectangle.
for(int i = 0 ; i < rectangleList.size();i++){
if(rectangleListt.get(i).getBackgroundColor().equals(ColorConstants.blue)){
try {
rectangleList.get(i).setBackgroundColor(ColorConstants.yellow);
Thread.sleep(1500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//rectSubFigureList.get(i).setBorder(null);
}/*else{
rectSubFigureList.get(i).setBackgroundColor(ColorConstants.blue);
}*/
}
答案 0 :(得分:4)
你可能在Swing的事件线程或EDT(用于事件调度线程)中调用Thread.sleep,这将导致线程本身进入休眠状态。由于此线程负责Swing的所有图形和用户交互,这实际上会使您的整个应用程序进入休眠状态,而不是您想要发生的事情。相反,请阅读并使用Swing Timer进行此操作。
参考文献:
要扩展Hidde的代码,您可以这样做:
// the timer:
Timer t = new Timer(2000, new ActionListener() {
private int changed = 0; // better to keep this private and in the class
@Override
public void actionPerformed(ActionEvent e) {
if (changed < rectangleList.size()) {
rectangleList.setBackgroundColor(someColor);
} else {
((Timer) e.getSource()).stop();
}
changed++;
}
});
t.start();
答案 1 :(得分:3)
您可以设置定时器:
// declaration:
static int changed = 0;
// the timer:
Timer t = new Timer(2000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// Change the colour here:
if (changed == 0) {
// change the first one
} else if (changed == 1) {
// change the second one
} else if (changed == 2) {
// change the last one
} else {
((Timer) e.getSource()).stop();
}
changed ++;
}
});
t.start();