我有一系列大小为n的颜色。在我的程序中,团队的数量总是< = n,我需要为每个团队分配一个独特的颜色。这是我的颜色数组:
private static Color[] TEAM_COLORS = {Color.BLUE, Color.RED, Color.CYAN, Color.GREEN, Color.ORANGE, Color.PINK};
当我在控制台中打印有关玩家的信息时,我想打印与它们相关的颜色。当我打印颜色时,我得到了
java.awt.Color[r=...,g=...,b=...].
我知道这就是Java打印颜色的方式。我想知道是否有办法打印蓝色,红色等(所以预定义的颜色字符串)。
答案 0 :(得分:3)
一种选择是创建NamedColor
枚举:
public enum NamedColor {
BLUE(Color.BLUE),
RED(Color.RED),
...;
private final Color awtColor;
private NamedColor(Color awtColor) {
this.awtColor = awtColor;
}
public Color getAwtColor() {
return awtColor;
}
}
然后,您的TEAM_COLORS
数组将包含NamedColor
个值而不是Color
个值的数组,并在需要时获取AWT颜色。枚举的默认toString
实现是它的名称。
另一种选择是创建自己的Map<Color, String>
并在需要颜色的字符串表示时咨询。
答案 1 :(得分:3)
这是一种基于反思的方法:
public static String getColorName(Color c) {
for (Field f : Color.class.getFields()) {
try {
if (f.getType() == Color.class && f.get(null).equals(c)) {
return f.getName();
}
} catch (java.lang.IllegalAccessException e) {
// it should never get to here
}
}
return "unknown";
}
示例:
getColorName(Color.BLACK); // black
getColorName(Color.BLUE); // blue
getColorName(new Color(0,1,2)); // unknown
这仅适用于java.awt.Color
中定义为字段的颜色,即:白色,浅灰色,灰色,深灰色,黑色,红色,粉红色,橙色,黄色,绿色,品红色,青色和蓝色。 / p>
答案 2 :(得分:2)
通过在枚举中添加名称来扩展@Jon_Skeet回复。
public enum NamedColor {
BLUE(Color.BLUE, "Blue"),
RED(Color.RED, "Red"),
...;
private final Color awtColor;
private final String colorName;
private NamedColor(Color awtColor, String name) {
this.awtColor = awtColor;
this.colorName = name;
}
public Color getAwtColor() {
return awtColor;
}
public String getColorName() {
return colorName;
}
}
注意:如果投票,请投票@Jon_Skeet回复,因为它是...的扩展...
答案 3 :(得分:1)
您可以创建一个类,同时存储代表颜色名称的String
以及Color
本身。
答案 4 :(得分:1)
如果你想让你的NamedColor用作java.awt.Color而你没有很多颜色,你可以扩展它并存储名称。
public class NamedColor extends java.awt.Color {
private String name;
public NamedColor(String name, java.awt.Color c) {
super(c.getRGB());
this.name = name;
}
public String toString() {
return name;
}
}
答案 5 :(得分:-2)
您可以尝试使用 将String.valueOf(color.getRGB())