将颜色对象转换为字符串

时间:2012-10-10 21:08:27

标签: java swing colors

  

可能重复:
  How To Print String representation of Color in 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]

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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);

答案 2 :(得分:1)

没有

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

如果你的RGB为0,0,1 - 几乎是黑色,只有一点点蓝色 - 它会是什么颜色?离开绿色怎么样?还是只带一点红色的黄色?

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

如果您不想查看注释中提到的NamedColor枚举路径,一个简单的解决方案可能是使用反射来遍历Color类的静态Color字段,并添加将每个字段名称转换为一个散列映射,并将其关联的颜色作为键,删除其中一个大写或小写重复,因为它具有两者。然后你可以看看你的颜色是否存在。

相关问题