java - Java 中的颜色类

标签 java awt

我对 Java 中的 awt Color 类有疑问。

我目前正在使用类缩写,例如 Color.REDColor.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);

然后

  1. 获取Class来自 Color 类的对象 getClass() .
  2. 使用 getDeclaredFields() 获取字段.
  3. 使用 Arrays.stream() 进行流式传输
  4. 通过调用 filter() 进行过滤,因此它只包含与您创建的颜色相等的所有枚举常量(应该是 1 或 0)。
  5. 使用toArray()将流转换为数组。
  6. 使用[0]获取该数组的第一个元素。如果没有与您的颜色匹配的预定义颜色,则会抛出 ArrayIndexOutOfBoundsException
  7. 使用 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/

相关文章:

java - Tomcat 安装目录无效。它缺少预期的文件或文件夹 tcruntime-ctl.sh

java - 为什么我们可以在Optional.of()上调用.orElse()?

java - Android:拥有永远不会被杀死的 Singleton 类

Java - 读取文本文件

java - 将 path2d 添加到 jpanel

java - 使用java为曲线下的区域着色

java - 在模型类中使用 awt 类

java - Cobertura,压制线永远不应该出现

java - 在全屏独占模式下在 JtextField 中键入问题

java - 给组件添加JComponents可能会出现什么问题