3

可能重复:
如何在 Java 中打印颜色的字符串表示

我有一个称为getColor()返回颜色的方法(如Color.BLACK)。有没有办法转换getColor()成它的名字的字符串?

String test = getColor().toString(); 

如果getColor()返回Color.BLACK,则

String test = Color.BLACK.toString();
System.out.println(test);

输出

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

3 回答 3

3

toString()永远无法重现用于存储该实例的变量的原始名称(因为可能有多个包含该实例)。

一种方法是手动比较Color实例:

Color theColor = getColor()
String colorName = null;
if (Color.BLACK.equals(theColor)) 
{
  colorName = "BLACK";
} 
else if (Color.WHITE.equals(theColor)) 
{
  colorName = "WHITE";
}
...
System.out.println(colorName);
于 2012-10-10T21:16:22.593 回答
3

根据颜色代码创建颜色名称的自定义映射。检索颜色代码后,使用自定义地图获取字符串。

       Map<Color, String> colorMap = new HashMap<Color, String>();
       colorMap.put(Color.BLACK, "Black"),   
       colorMap.put(Color.RED, "Red"),  
       .......

一旦你有了你的颜色,使用下面来获取颜色名称:

      Color myColor = getColor();
      String colorName = colorMap.get(myColor);
于 2012-10-10T21:18:36.050 回答
1

不。

Color.BLACK是大范围的颜色之一,并映射到 0、0、0 的 RGB 值。

如果你有一个 0、0、1 的 RGB - 几乎是黑色,只有一点蓝色 - 那会是什么颜色?偏绿怎么办?还是黄色加一点额外的红色?

这就是为什么无法再次将原始颜色转换回字符串的原因。因为有更多的颜色由不同的 RGB 值表示,而不仅仅是由字符串表示的颜色。

如果您不想走评论中提到的 NamedColor 枚举路线,一个简单的解决方案可能是使用反射来遍历类的静态Color字段Color,并将每个字段名称添加到哈希图中,并将其关联的颜色作为键, 删除其中一个大写或小写重复项,因为它两者都有。然后你可以看看你的颜色是否在那里。

于 2012-10-10T21:16:20.757 回答