Java 将颜色对象转换为字符串

Java 将颜色对象转换为字符串,java,swing,colors,Java,Swing,Colors,可能重复: 我有一个名为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] 没有 Color.

可能重复:

我有一个名为
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]
没有

Color.BLACK
是一系列颜色中的一种,它映射到0,0,0的RGB值

如果你有一个0,0,1的RGB-几乎是黑色,只有一点蓝色-那会是什么颜色?去果岭怎么样?还是黄色加一点红色

这就是为什么无法将原始颜色再次转换为字符串的原因;因为用不同的RGB值表示的颜色比用字符串表示的颜色多得多

如果您不想走注释中提到的NamedColor枚举路线,一个简单的解决方案可能是使用反射遍历
Color
类的静态
Color
字段,并将每个字段名称添加到hashmap中,并将其关联的颜色作为键,删除其中一个大写或小写副本,因为它同时具有两个副本。然后可以查看颜色是否在那里。

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

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

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);

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

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

你在期待什么?字符串
黑色
?它还应该返回什么?它不能返回变量名,我想知道至少对于系统指定的默认值,是否有某种方法使用反射?当颜色为Color[r=0,g=0,b=0]时,可以包装/扩展Color并覆盖toString以返回黑色
      Color myColor = getColor();
      String colorName = colorMap.get(myColor);