从color的实例中获取表示颜色名称的字符串



如何从color类的实例中获得代表颜色名称的字符串(而不是awt RGB代码)?

例如我有

Color black=Color.BLACK;

我想要得到字符串"Black"

我知道这应该是可能的使用Java反射,但我不是很熟悉它。谢谢你。

Color类只有几个非静态字段

name      | type         
----------+---------------
value     | int 
frgbvalue | float[] 
fvalue    | float[] 
falpha    | float 
cs        | java.awt.color.ColorSpace 

和这些字段都不存储颜色名称。它也没有任何方法来检查你使用的颜色是否等于它的一个预定义的颜色并存储在静态引用中,比如

public final static Color black = new Color(0, 0, 0);
public final static Color BLACK = black;

但是没有什么能阻止你实现自己的方法,它会为你做这件事。这样的方法看起来像

public static Optional<String> colorName(Color c) {
    for (Field f : Color.class.getDeclaredFields()) {
        //we want to test only fields of type Color
        if (f.getType().equals(Color.class))
            try {
                if (f.get(null).equals(c))
                    return Optional.of(f.getName().toLowerCase());
            } catch (IllegalArgumentException | IllegalAccessException e) {
                // shouldn't not be thrown, but just in case print its stacktrace
                e.printStackTrace();
            }
    }
    return Optional.empty();
}

用法示例

System.out.println(colorName(Color.BLACK).orElse("no name found"));
System.out.println(colorName(new Color(10, 20, 30)).orElse("no name found"));
System.out.println(colorName(null).orElse("no name found"));
输出:

black
no name found
no name found

您可以使用预定义的map <Color, String>来插入一些预定义的颜色,然后使用它来获得名称

HashMap<Color,String> hm = new HashMap <Color,String>();
hm.put(Color.BLACK,"Black");
.
.
.
hm.get(Color.BLACK)

相关内容

  • 没有找到相关文章

最新更新