2010-09-22 50 views
7

我試圖通過名稱獲取顏色,並且我遇到了Converting a String to Color in Java,這表示使用java.awt.getColorjava.awt.Color.getColor(String colorName)是如何工作的?

我不能算出什麼傳遞它作爲一個字符串,雖然。下面

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

打印出

java.awt.Color中[R = 255,G = 0,B = 0]

即它與在默認顏色去那裏。

我已經把它放在一個文本框中,並嘗試了另類的資本化等等。這裏的文檔不是很有幫助。任何人都可以提出什麼魔術弦放入?

+0

如果您閱讀更仔細鏈接的問題,您會發現Color.getColor不是合適的選擇。這個問題的反思版似乎更合適。 – spender 2010-09-22 17:48:51

+0

好的 - 我多次閱讀,答案意味着我可以使用這種方法通過名稱獲得顏色,這比使用反射更加簡潔和自然。 bwawok的答案是否是錯誤的,並且沒有爲默認顏色集設置系統屬性? – 2010-09-22 18:08:29

+0

是的,情況就是這樣。答案是錯誤的。 – 2010-09-22 18:12:10

回答

11

未被接受的答案使用Color.getColor。該方法從可能存在或不存在的系統屬性讀取。你不應該使用這種方法。

相反,您應該使用upvoted reflection方法來查找Color類的靜態成員。要麼這樣,要麼導入自己的顏色數據庫,將字符串名稱映射到RGB值。

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

嗨,Eric,你說:「你不應該用這種方法。」但是爲什麼?我目前正在創建一個自定義的ListCellRenderer。我希望它使用選定項目的默認顏色。你的建議,不使用這種方法讓我感到奇怪。 – exhuma 2011-02-23 16:15:14

+0

我明白你爲什麼會感到困惑。 OP所鏈接問題中未被接受的答案已被刪除。在接受的答案中使用該方法,出於我在此答案中陳述的原因。 – 2011-02-23 19:05:28