2016-02-29 86 views
1

我正在使用包含Color对象的对象模型。在java中通过名称获取颜色

import java.awt.Color; 

public class MyObject { 

    ... 
    private String color; 

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

} 

在JSON查询的响应,我留下了一个彩色

“颜色”的实体名称:“蓝色”

我知道颜色对象有静态即

Color.blue; 

有什么办法可以将实际颜色名称解码为Color对象?或者我需要自己手动将字符串映射到rgb值?

我在找的东西,应该是这个

Color c = new Color("blue"); 

输出不工作

+0

这些颜色来自哪里?它们是否对应于Java的常量? – shmosel

+0

为参数的缘故,没有颜色与_Color_的静态值不匹配。 –

+0

http://stackoverflow.com/q/21762987/1737819 – Willmore

回答

2

如果你的名字对应那些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; 
    } 
} 
1

你可以做到这一点是这样的:

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

对不起,如果我是uncler,最终的输出需要是一个Color对象。我想过使用_class.forName_,但不确定这里如何。 –

+0

问题没有提示Android。我会将'android.graphics'换成'java.awt'。另外,由于OP想要这个对象。我会使用'颜色蓝色= field.get(null);'。 – Sarvadi

+0

在java中: 尝试{ \t \t \t Class color = Class.forName(“java.awt.Color”); \t \t \t Field field = color.getField(“blue”); \t \t \t颜色蓝色=(Color)field.get(null); (例外e){ \t \t} catch(Exception e){ \t \t \t e.printStackTrace(); \t \t} – wngxao