如何从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)