如何在Java中打印颜色的字符串表示
我有一系列大小为n的颜色。在我的程序中,团队的数量总是一个选项是创建NamedColor枚举: 然后,将团队颜色数组设置为NamedColor值数组,而不是颜色值数组,并在需要时获取AWT颜色。枚举的默认toString实现是其名称 另一种选择是创建自己的地图,并在需要颜色的字符串表示时查阅地图。您可以尝试使用如何在Java中打印颜色的字符串表示,java,tostring,Java,Tostring,我有一系列大小为n的颜色。在我的程序中,团队的数量总是一个选项是创建NamedColor枚举: 然后,将团队颜色数组设置为NamedColor值数组,而不是颜色值数组,并在需要时获取AWT颜色。枚举的默认toString实现是其名称 另一种选择是创建自己的地图,并在需要颜色的字符串表示时查阅地图。您可以尝试使用 String.valueOfcolor.getRGB您可以创建一个存储表示颜色名称的字符串以及颜色本身的类。如果您希望您的NamedColor用作java.awt.color,而您没有很
String.valueOfcolor.getRGB您可以创建一个存储表示颜色名称的字符串以及颜色本身的类。如果您希望您的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;
}
}
通过在枚举中添加名称来扩展@Jon_Skeet reply
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 reply,因为它是该方法的扩展…以下是一种基于反射的方法:
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
演示:
这仅适用于中定义为字段的颜色,即:白色、浅灰色、灰色、深灰色、黑色、红色、粉色、橙色、黄色、绿色、品红、青色和蓝色。如果红色为255,0,0,254,0,0的名称是什么?您希望使用16777216个颜色名称吗?为了方便起见,您使用的颜色类中的静态字段可能存在重复,并且引用没有任何文本名称的颜色对象;它们是RGB值。我收回这一点,更仔细地看这篇文章让我意识到OP谈论的是预定义的颜色,而且数量有限。@AndrewThompson-是的,但它没有改变任何东西,在Color类中没有匹配的字符串。你必须自己做映射。@Jon_Skeet我只是通过在枚举中添加colorName作为属性来扩展你的回答……这样所有的东西都在一个地方。@havexz:你可以这样做-但是我通常只使用枚举名,除非我有充分的理由不这样做。@Jonsket我完全同意你的看法。扩展代码适用于所有字符串文本不在代码外部的情况,特别是不担心多字符串的情况。但是如果我们有基于语言的来自外部代码的字符串文本,那么我们可以删除colorName成员变量,只使用通过某个帮助器类从外部源获取的api。但所有这些解决方案在选择之前都必须根据情况考虑。
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;
}
}
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