java - 实现 setNextColor() 函数

标签 java colors

我想以某种方式调用我的程序的函数 setNextColour(); (java.awt.Color),以便每次调用它时都会分配一个新颜色,但我不知道该怎么做。

也许是一个列出颜色顺序的枚举,每次调用它时我都会得到枚举中的下一个颜色?

最佳答案

你可以这样做:

public enum Color {
    BLUE,
    GREEN,
    RED,
    YELLOW;

    public Color next() {
        return Color.values()[ (this.ordinal() + 1) % Color.values().length ];
    }
}

使用 Color#next() 会迭代所有 Color 并最终回到开头,当它到达最后一个时。

例如:

public static void main(String[] args) {
    Color currentColor = Color.BLUE;
    for(;;) {
        System.out.println(currentColor);
        currentColor = currentColor.next();
    }
}

...将输出:

BLUE
GREEN
RED
YELLOW
BLUE
GREEN
RED
YELLOW
BLUE
GREEN
RED
...
<小时/>

如果您想将其与实际的 java.awt.Color 接口(interface),我建议您按如下方式简单地增强它:

public enum ColourSet {
    BLUE(Color.BLUE),
    GREEN(Color.GREEN),
    RED(Color.RED),
    YELLOW(Color.YELLOW);

    private final java.awt.Color color;

    private ColourSet(java.awt.Color color) {
        this.color = color;
    }

    public ColourSet next() {
        return ColourSet.values()[ (this.ordinal() + 1) % ColourSet.values().length];
    }

    public java.awt.Color getColor() {
        return color;
    }

    public static void main(String[] args) {
        ColourSet current = ColourSet.BLUE;
        for(;;) {
            System.out.println(current.getColor());
            current = current.next();
        }
    }
}

以同样的方式,该代码现在将输出:

java.awt.Color[r=0,g=0,b=255]
java.awt.Color[r=0,g=255,b=0]
java.awt.Color[r=255,g=0,b=0]
java.awt.Color[r=255,g=255,b=0]
java.awt.Color[r=0,g=0,b=255]
java.awt.Color[r=0,g=255,b=0]
java.awt.Color[r=255,g=0,b=0]
java.awt.Color[r=255,g=255,b=0]
java.awt.Color[r=0,g=0,b=255]
java.awt.Color[r=0,g=255,b=0]
java.awt.Color[r=255,g=0,b=0]
...

关于java - 实现 setNextColor() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26373007/

相关文章:

java - 每次点击迭代一个字母

java - 使用内联 CSS 提取 HTML 文章文本

java - 如何查询一般情况?

java - 如何更改 JProgressBar 颜色?

html - 如何让文本在CSS中改变颜色?

java - 如何在内存中嵌入 MariaDB4j 以替换 JUnit 测试中默认的 Spring DataSource?

具有多种实现的 Java 通用接口(interface)

c++ - SFML 拾色器问题

java - 我如何在 Java 中确定图像的色彩空间?

jQuery - 将具有颜色属性的类添加到链接