2013-03-07 42 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