循环通过窗口中的颜色

时间:2015-03-04 22:53:02

标签: java arrays swing user-interface colors

我是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));
    }
}

1 个答案:

答案 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为您执行此操作更容易。请注意,它为您隐身使用后台线程。