更改间隔的面板颜色
Change panel color for an interval
我想创建一个程序,当单击按钮时,面板可能会或可能不会改变它的颜色。如果选择了错误的组合,我有一组面板会变成红色。但我只想让它变红大约 1-2 秒。之后,我将再次将面板背景更改为空。我希望每个面板在变红时都有自己的计时器。到目前为止,这是我的代码:
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()
方法冻结了整个程序。我怎样才能做到这一点?
我使用 java.util.Timer
包找到了解决我的问题的方法。由于 Timer()
class 需要 final 到 运行 run()
方法,我将 JPanel
分配给了一个 final 变量。然后我在第一次延迟结束后取消了计时器。
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);
我想创建一个程序,当单击按钮时,面板可能会或可能不会改变它的颜色。如果选择了错误的组合,我有一组面板会变成红色。但我只想让它变红大约 1-2 秒。之后,我将再次将面板背景更改为空。我希望每个面板在变红时都有自己的计时器。到目前为止,这是我的代码:
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()
方法冻结了整个程序。我怎样才能做到这一点?
我使用 java.util.Timer
包找到了解决我的问题的方法。由于 Timer()
class 需要 final 到 运行 run()
方法,我将 JPanel
分配给了一个 final 变量。然后我在第一次延迟结束后取消了计时器。
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);