【问题标题】:getting a color by name in java [duplicate]在java中按名称获取颜色[重复]
【发布时间】:2016-02-29 05:53:13
【问题描述】:

我正在使用包含 Color 对象的对象模型。

import java.awt.Color;

public class MyObject {

    ...
    private String color;

    public void setColor( Color c ) ...
    public Color getColor() ...
    ...

}

在 json 查询的响应中,我留下了一个颜色的物理名称

“颜色”:“蓝色”

我知道 Color 对象具有静态,即

Color.blue;

有没有办法将实际颜色名称解码为 Color 对象?还是我需要自己手动将字符串映射到 rgb 值?

我正在寻找应该是这个输出的东西

Color c = new Color("blue");

这不起作用

【问题讨论】:

  • 这些颜色从何而来?它们是否对应 Java 的常量?
  • 为了参数,是的,不会有与 Color 的静态颜色不匹配的颜色。

标签: java colors


【解决方案1】:

如果你的名字与 Java 的常量对应,你可以使用反射来映射它们:

public static Color getColorByName(String name) {
    try {
        return (Color)Color.class.getField(name.toUpperCase()).get(null);
    } catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException e) {
        e.printStackTrace();
        return null;
    }
}

【讨论】:

    【解决方案2】:

    你可以这样做:

    try {
            Class color=Class.forName("android.graphics.Color");
            Field field=color.getField("BLUE");
            int blue=field.getInt(null);
        } catch (Exception e) {
            e.printStackTrace();
        }
    

    【讨论】:

    • 对不起,如果我是叔叔,最终输出需要是一个 Color 对象。我曾想过使用 class.forName,但不确定如何使用。
    • 问题中没有任何内容建议使用 Android。我会将android.graphics 换成java.awt。此外,因为 OP 想要该对象。我会使用Color blue = field.get(null);
    • 在 java 中:尝试 { Class color=Class.forName("java.awt.Color");字段字段=color.getField("蓝色");颜色蓝色=(颜色) field.get(null); } 捕捉(异常 e){ e.printStackTrace(); }
    猜你喜欢
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    • 2013-10-27
    • 2020-10-30
    • 1970-01-01
    • 2011-12-14
    • 2014-01-03
    • 2011-09-24
    相关资源
    最近更新 更多