【问题标题】:Converting a color object to a string [duplicate]将颜色对象转换为字符串 [重复]
【发布时间】:2012-10-10 21:08:26
【问题描述】:

可能重复:
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]

【问题讨论】:

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

标签: java swing colors


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

           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】:

      没有。

      Color.BLACK 是众多颜色中的一种,并映射到 0、0、0 的 RGB 值。

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

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

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

      【讨论】:

        猜你喜欢
        • 2016-02-15
        • 1970-01-01
        • 2020-01-25
        • 2020-11-15
        • 1970-01-01
        • 2016-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多