我想在事件发生时将按钮背景颜色更改10次?
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
try {
for (int i = 0; i < 10; ++i) {
Random r = new Random();
jButton2.setBackground(new Color(r.nextInt(150), r.nextInt(150), r.nextInt(150)));
jButton2.repaint();
Thread.sleep(200);
}
} catch (Exception e) {
System.out.println(e.toString());
}
}
但按钮显示最后一种颜色
感谢它正常工作
int x = 0;
Timer timer;
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Random r = new Random();
jButton2.setBackground(new Color(r.nextInt(150), r.nextInt(150), r.nextInt(150)));
jButton2.repaint();
if(x==10){
timer.stop();
x=0;
} else{
x++;
}
}
});
timer.start();
}
答案 0 :(得分:3)
不要在Swing事件线程上调用Thread.sleep(...),因为这会使整个Swing GUI进入休眠状态。换句话说,您的GUI不会进行绘画,根本不接受任何用户输入或交互,并且在事件发生时变得完全无用(也称为 E vent D ispatch T hread或 EDT )。请改用Swing Timer。请查看Swing Timer Tutorial以获取更多帮助。
另请参阅this question的一些答案,包括mKorbel的答案。