Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在窗口中循环浏览颜色_Java_Arrays_Swing_User Interface_Colors - Fatal编程技术网

Java 在窗口中循环浏览颜色

Java 在窗口中循环浏览颜色,java,arrays,swing,user-interface,colors,Java,Arrays,Swing,User Interface,Colors,我是Java编程的初学者,遇到了一个问题(可能是一个容易解决的问题) 我正在使用JavaGUI进行实验,希望创建一个窗口,在该窗口中,数组的颜色循环,直到不再有颜色为止。我相信我可以使用for循环并在数组中循环,但是我不知道如何循环背景色 任何帮助和解释都将不胜感激 public void flashColor() { Color [] color = { Color.red,Color.orange,Color.green }; int i = 0; for(i

我是Java编程的初学者,遇到了一个问题(可能是一个容易解决的问题)

我正在使用JavaGUI进行实验,希望创建一个窗口,在该窗口中,数组的颜色循环,直到不再有颜色为止。我相信我可以使用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));
    }
}
public void flashColor(){
Color[]Color={Color.red,Color.orange,Color.green};
int i=0;
对于(i=0;i,这条线告诉我:

getContentPane().setBackground(Color(i));
您的似乎是一个Swing GUI(您的问题中遗漏的关键信息!),因此您需要考虑Swing线程。您当前的代码实际上会循环使用所有颜色,但它会立即在Swing线程上循环,这样GUI将无法绘制除最后一种颜色以外的任何颜色。解决方案:使用Swing计时器,而不是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计时器来完成此操作要容易得多。请注意,它为您使用了一个不可见的背景线程。

我忘了提到,我以前能够设置背景颜色并打开窗口而不会出错。Ev我在程序中遗漏的任何东西都能正常工作。我也不明白为什么花括号在代码块之外。你需要一个摆动计时器来在特定的时间间隔内改变颜色。谢谢你的帮助!有没有办法在没有摆动计时器的情况下实现它?或者这对GUI来说是非常必要的?@初学者:请参见编辑以回答。问题Swing Timer是最简单的方法,也是标准的方法。