【问题标题】:How does java.awt.Color.getColor(String colorName) work?java.awt.Color.getColor(String colorName) 是如何工作的?
【发布时间】:2011-04-15 21:15:08
【问题描述】:

我正在尝试按名称获取颜色,我遇到了Converting a String to Color in Java,它建议使用java.awt.getColor

不过,我无法弄清楚将它作为字符串传递的内容。以下

System.out.println( java.awt.Color.getColor( "black", Color.red ) );

打印出来

java.awt.Color[r=255,g=0,b=0]

即它使用默认颜色。

我已经把它放在一个文本框中,并尝试了其他大写字母等。这些文档在这里不是很有帮助。谁能建议放什么魔法字符串?

【问题讨论】:

  • 如果您更仔细地阅读链接到的问题,您会发现 Color.getColor 不是一个合适的选择。该问题中的反射版本似乎更合适。
  • OK——我读了好几遍,答案暗示我可以使用这种方法通过名称获取颜色,这比使用反射更简洁自然。是不是bwawok的回答错了,默认颜色集没有设置系统属性?
  • 是的,就是这样。答案是错误的。

标签: java colors awt


【解决方案1】:

不接受的答案使用Color.getColor。此方法从可能存在或不存在的系统属性中读取。你不应该使用这种方法。

相反,您应该使用upvoted 反射方法来查找Color 类的静态成员。要么这样,要么你应该导入你自己的颜色数据库,它将字符串名称映射到 RGB 值。

Color color;
try {
    Field field = Color.class.getField("yellow");
    color = (Color)field.get(null);
} catch (Exception e) {
    color = null; // Not defined
}

【讨论】:

  • 嗨,Eric,您说:“您不应该使用这种方法。”...但是为什么呢?我目前正在创建一个自定义 ListCellRenderer。我希望它为所选项目使用默认颜色。你关于不使用这种方法的建议让我觉得很奇怪。
  • 我明白你为什么感到困惑了。 OP 链接的问题中未接受的答案已被删除。由于我在此答案中说明的原因,请使用已接受答案中的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-27
  • 2011-01-31
  • 2010-10-16
  • 2018-03-06
  • 2014-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多