我想以某种方式调用我的程序的函数 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/