【问题标题】:Looping through colours in a window在窗口中循环颜色
【发布时间】:2015-05-06 03:55:22
【问题描述】:

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

【问题讨论】:

  • 我忘了说我之前可以设置背景颜色和打开窗口没有错误。我在程序中遗漏的所有其他内容都可以正常工作。
  • 我也不明白为什么大括号在代码块之外
  • 你需要一个Swing Timer在一定的时间间隔内改变颜色。

标签: java arrays swing user-interface colors


【解决方案1】:

这一行告诉我:

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 为您执行此操作要容易得多。请注意,它为您使用了一个不可见的后台线程。

【讨论】:

  • 感谢您的帮助!没有Swing Timer,有什么方法可以实现吗?或者这对 GUI 来说非常重要?
  • @Beginner:见编辑回答。 Swing Timer 是执行此操作的最简单方法,也是标准方法。
猜你喜欢
  • 1970-01-01
  • 2022-11-17
  • 2017-12-29
  • 1970-01-01
  • 2011-09-08
  • 1970-01-01
  • 1970-01-01
  • 2014-08-03
相关资源
最近更新 更多