我有一个名为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]
答案 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
字段,并添加将每个字段名称转换为一个散列映射,并将其关联的颜色作为键,删除其中一个大写或小写重复,因为它具有两者。然后你可以看看你的颜色是否存在。