2016-02-29 28 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

相關問題