我是Java编程的初学者,遇到过一个问题(可能很容易解决)。
我正在尝试使用Java GUI并希望创建一个窗口,在该窗口中循环播放数组的颜色,直到没有更多颜色。我相信我可以使用for循环并循环遍历数组,但是我不知道如何循环遍历背景颜色。
任何帮助和解释都将不胜感激。
public void flashColor() {
Color [] color = { Color.red,Color.orange,Color.green };
int i = 0;
for(i=0;i<color.length;i--){
getContentPane().setBackground(Color(i));
}
}
答案 0 :(得分:2)
这一行告诉我:
getContentPane().setBackground(Color(i));
你的看起来像是一个Swing GUI(你提出的一些关键信息!),所以你需要考虑Swing线程。你的当前代码实际上将循环遍历所有颜色,但它会立即执行,并且在Swing线程上,以便GUI无法绘制除最后一个颜色之外的任何颜色。解决方案:使用Swing Timer而不是for循环。在计时器内部推进一个索引int变量并使用它来显示颜色。
类似的东西:
getContentPane().setBackground(colorArray[0]);
int delay = 1000; // for 1 second
Timer myTimer = new Timer(delay, new ActionListener() {
int index = 0;
public void actionPerformed(ActionEvent e) {
index++;
if (index >= colorArray.length) {
((Timer)e.getSource()).stop(); // stop the timer
} else {
getContentPane().setBackground(colorArray[index]);
}
}
});
myTimer.start();
代码尚未经过测试,您需要阅读Swing Timer教程了解详细信息。
注意这里的关键是肯定你需要循环,和暂停(以便可以看到颜色)但你需要进行循环并暂停线程线程中的Swing事件调度线程(或EDT)。是的,您可以使用SwingWorker执行此操作,但这是一种更难以实现此目的的方法。使用Swing Timer为您执行此操作更容易。请注意,它为您隐身使用后台线程。