在 Java 核心类中没有办法用单一方法来做到这一点。但是,您可以通过两种方式自己轻松地做到这一点。
第一种方式
首先,创建一个Colors 中的HashMap,其中包含您想要的所有颜色:
HashMap<Color, String> colors = new HashMap<Color, String>();
colors.put(Color.BLACK, "BLACK");
colors.put(Color.BLUE, "BLUE");
colors.put(Color.CYAN, "CYAN");
colors.put(Color.DARK_GRAY, "DARK_GRAY");
colors.put(Color.GRAY, "GRAY");
colors.put(Color.GREEN, "GREEN");
colors.put(Color.LIGHT_GRAY, "LIGHT_GRAY");
colors.put(Color.MAGENTA, "MAGENTA");
colors.put(Color.ORANGE, "ORANGE");
colors.put(Color.PINK, "PINK");
colors.put(Color.RED, "RED");
colors.put(Color.WHITE, "WHITE");
colors.put(new Color(192, 0, 255), "PURPLE");
colors.put(new Color(0xBADA55), "BADASS_GREEN");
colors.put(new Color(0, 0, 128), "DARK_BLUE");
然后,从您拥有的 RGB 值中创建一个新的Color:
Color color = new Color(var1, var2, var3);
最后,get colors 中的值作为键 color:
String colorName = colors.get(color);
第二种方式
这可能是一种不太脆弱的方式,但确实存在问题,并且无法按原样工作。您需要捕获一些异常,并且可能需要处理字段不是静态且您不能只执行f.get(null) 的情况。
从您拥有的 RGB 值中创建一个新的Color:
Color color = new Color(var1, var2, var3);
然后
- 使用
getClass() 从Color 类中获取Class 对象。
- 使用
getDeclaredFields() 从中获取字段。
- 使用
Arrays.stream() 流式传输
- 通过调用
filter()对其进行过滤,因此它只包含与您制作的颜色相同的所有枚举常量(应该是一或零)。
- 使用
toArray() 将流转换为数组。
- 使用
[0] 获取该数组的第一个元素。如果没有与您的颜色匹配的预定义颜色,这将引发 ArrayIndexOutOfBoundsException。
- 使用
Enum 的toString() 获取该颜色的名称。
String colorName = Arrays.stream(Color.getClass().getDeclaredFields())
.filter(f -> f.get(null).equals(color))
.toArray()[0]
.toString();