我对 Java 中的 awt Color
类有疑问。
我目前正在使用类缩写,例如 Color.RED
和 Color.BLACK
。我还有一个包含三个整数的列表,如下所示:
int var1 = 0
int var2 = 0
int var3 = 255
有没有一种方法可以将这些整数转换为适当的 Java Color
名称?
最佳答案
无法使用 Java 核心类中的单个方法来完成此操作。但是,您可以通过两种方式相当轻松地自行完成此操作。
第一种方法
首先,创建一个HashMap
包含您想要的所有颜色的 Color
数:
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 = new Color(var1, var2, var3);
然后
- 获取
Class
来自Color
类的对象getClass()
. - 使用
getDeclaredFields()
获取字段. - 使用
Arrays.stream()
进行流式传输 - 通过调用
filter()
进行过滤,因此它只包含与您创建的颜色相等的所有枚举常量(应该是 1 或 0)。 - 使用
toArray()
将流转换为数组。 - 使用
[0]
获取该数组的第一个元素。如果没有与您的颜色匹配的预定义颜色,则会抛出ArrayIndexOutOfBoundsException
。 - 使用
Enum
获取该颜色的名称的toString()
.
String colorName = Arrays.stream(Color.getClass().getDeclaredFields())
.filter(f -> f.get(null).equals(color))
.toArray()[0]
.toString();
关于java - Java 中的颜色类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23346208/