将颜色对象转换为字符串

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]

2
你期望得到什么?字符串 black 吗? - NullUserException
它还应该返回什么?它不能返回变量名。 - user330315
我想知道对于指定的系统默认值,是否有一种使用反射的方法? - Sachin Kainth
你可以包装/扩展Color并覆盖toString方法,以便在颜色为Color[r=0,g=0,b=0]时返回Black。 - Luke
3个回答

4
创建一个自定义的颜色名称与颜色代码对应的地图。一旦您检索到颜色代码,可以使用您的自定义地图获取字符串。
       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);

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

不行。

Color.BLACK 是众多颜色之一,对应的 RGB 值为 0、0、0。

如果你有一个 RGB 值为 0、0、1 的几乎黑色,只有一点点蓝色,那会是什么颜色?再比如说淡绿色?或者只有一点额外红色的黄色?

这就是为什么没有办法将原始颜色转换回字符串的原因;因为用不同的 RGB 值表示的颜色远远超过了用字符串表示的颜色。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接