2013-03-07 41 views
3

我正在開發一個Java項目。我想爲用戶輸入一個標籤的顏色。我想要做這樣的事情,但要用String。使用字符串設置JLabel的顏色

jLabel3.setForeground(Color.blue); 

這是我嘗試過,但沒有奏效:

String a = "blue"; 
jLabel3.setForeground(Color.a); 

或:

String a = "blue"; 
jLabel3.setForeground(a); 

有可能的另一種方式與方法來做到這一點?任何幫助都會很棒。謝謝。

回答

7

這裏有一種方法:

Map<String, Color> colors = new HashMap<String, Color>(); 

// ... 

colors.put("blue", Color.BLUE); 
colors.put("red", Color.RED); 
colors.put("green", Color.GREEN); 
// other colors 

然後使用它像:

String a = "blue"; 
jLabel3.setForeground(colors.get(a.toLowerCase())); 

編輯:考慮顏色選擇。請參閱How to Use Color Choosers

+1

非常感謝你!這對我有效。 – 2013-03-07 21:29:00

+0

「-1:僅適用於預定義顏色,不適用於用戶定義的顏色」 - Aubin – 2013-03-07 22:01:37

+1

對於Map '爲+1;對於任意[命名的顏色](http://www.w3schools.com/html/html_colornames.asp),建議使用[here](http://stackoverflow.com/a/6717956/230513)。還要考慮[雙向映射](http://stackoverflow.com/q/3430170/230513)。 – trashgod 2013-03-07 22:36:50

4

嘗試反思:

Color color; 
try { 
    Field field = Class.forName("java.awt.Color").getField("yellow"); 
    color = (Color)field.get(null); 
} catch (final Exception e) { 
    e.printStackTrace(); 
} 

除此之外,你可以創建地圖的顏色和他們的名字。

+1

-1:僅適用於預定義顏色,不適用於用戶定義的顏色,即使您的代碼示例編譯並運行良好,反射也不適用於此需求。 – Aubin 2013-03-07 21:34:34

+0

Eng.Fouad已經爲我做了,沒有什麼補充,它是完美的,upvoted – Aubin 2013-03-07 21:52:15

+0

然後你沒有什麼可以在這裏貢獻。此外,最後我檢查了一下,他只能用於預定義的顏色。 – 2013-03-07 22:01:02

0

不知道是否有更好的辦法,但你可以做財產以後這樣的:

If("blue".equals(a)){ 
    jLabel3.setForeground(Color.blue); 
} 
+0

如果我們有256種顏色,您需要在每個需要顏色的位置添加256 * 3 LOC? – Aubin 2013-03-07 21:35:27

+1

@Aubin準確地說,這是一種非常原始的方式,但取決於用戶允許使用多少種不同的顏色,它可能會有效。 – Boyen 2013-03-07 21:37:03