如何在Java中打印颜色的字符串表示形式

时间:2012-02-10 06:52:18

标签: java tostring

我有一系列大小为n的颜色。在我的程序中,团队的数量总是< = n,我需要为每个团队分配一个独特的颜色。这是我的颜色数组:

private static Color[] TEAM_COLORS = {Color.BLUE, Color.RED, Color.CYAN, Color.GREEN, Color.ORANGE, Color.PINK};

当我在控制台中打印有关玩家的信息时,我想打印与它们相关的颜色。当我打印颜色时,我得到了

java.awt.Color[r=...,g=...,b=...]. 

我知道这就是Java打印颜色的方式。我想知道是否有办法打印蓝色,红色等(所以预定义的颜色字符串)。

6 个答案:

答案 0 :(得分:3)

一种选择是创建NamedColor枚举:

public enum NamedColor {
    BLUE(Color.BLUE),
    RED(Color.RED),
    ...;

    private final Color awtColor;

    private NamedColor(Color awtColor) {
        this.awtColor = awtColor;
    }

    public Color getAwtColor() {
        return awtColor;
    }
}

然后,您的TEAM_COLORS数组将包含NamedColor个值而不是Color个值的数组,并在需要时获取AWT颜色。枚举的默认toString实现是它的名称。

另一种选择是创建自己的Map<Color, String>并在需要颜色的字符串表示时咨询。

答案 1 :(得分:3)

这是一种基于反思的方法:

public static String getColorName(Color c) {
    for (Field f : Color.class.getFields()) {
        try {
            if (f.getType() == Color.class && f.get(null).equals(c)) {
                return f.getName();
            }
        } catch (java.lang.IllegalAccessException e) {
            // it should never get to here
        } 
    }
    return "unknown";
}

示例:

getColorName(Color.BLACK); // black
getColorName(Color.BLUE); // blue
getColorName(new Color(0,1,2)); // unknown

演示:http://ideone.com/6cIBD


这仅适用于java.awt.Color中定义为字段的颜色,即:白色,浅灰色,灰色,深灰色,黑色,红色,粉红色,橙色,黄色,绿色,品红色,青色和蓝色。 / p>

答案 2 :(得分:2)

通过在枚举中添加名称来扩展@Jon_Skeet回复。

public enum NamedColor {
  BLUE(Color.BLUE, "Blue"),
  RED(Color.RED, "Red"),
  ...;

  private final Color awtColor;
  private final String colorName;

  private NamedColor(Color awtColor, String name) {
    this.awtColor = awtColor;
    this.colorName = name;
  }

  public Color getAwtColor() {
    return awtColor;
  }

  public String getColorName() {
    return colorName;
  }
}

注意:如果投票,请投票@Jon_Skeet回复,因为它是...的扩展...

答案 3 :(得分:1)

您可以创建一个类,同时存储代表颜色名称的String以及Color本身。

答案 4 :(得分:1)

如果你想让你的NamedColor用作java.awt.Color而你没有很多颜色,你可以扩展它并存储名称。

public class NamedColor extends java.awt.Color {

    private String name;

    public NamedColor(String name, java.awt.Color c) {
        super(c.getRGB());
        this.name = name;
    }

    public String toString() {
        return name;
    }
}

答案 5 :(得分:-2)

您可以尝试使用        将String.valueOf(color.getRGB())