我想创建一个程序,当单击按钮时,面板可能会也可能不会更改它的颜色。我有一组面板,如果选择了错误的组合,它将变为红色。但我只想让它变红约1-2秒。之后,我将再次将面板背景更改为null。我希望每个面板在红色时都有自己的计时器。到目前为止,这是我的代码:
javax.swing.Timer timer = new javax.swing.Timer (250, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
pnlArray [count - 2][count2].setBackground (Color.RED);
};
});
pnlArray [count - 2][count2].setBackground (null);
此代码生成错误:local variables referenced from an inner class must be final or effectively final
。显然,pnlArray[][]
不是最终的小组。然而,Thread.sleep()
方法会冻结整个程序。我怎样才能做到这一点?
答案 0 :(得分:0)
我使用java.util.Timer
包找到了我的问题的解决方案。由于Timer()
类需要final才能运行run()
方法,因此我将JPanel
分配给了最终变量。然后我在第一次延迟结束后取消了计时器。
final JPanel pnlChange = pnlArray [count - 2][count2];
pnlChange.setBackground (Color.RED);
java.util.Timer timer = new java.util.Timer ();
TimerTask task = new TimerTask () {
int seconds = 4;
int divisor = 0;
@Override
public void run() {
divisor++;
if (divisor % seconds == 0) {
timer.cancel ();
pnlChange.setBackground (null);
}
}
};
timer.schedule(task, 0, 1000);