使用字符串设置JLabel的颜色

3
我正在开发一个Java项目。我希望用户能够输入标签的颜色。我想实现类似于下面这样的功能,但是使用字符串。
jLabel3.setForeground(Color.blue);

这是我尝试过的,但并没有成功:

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

或者:

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

有没有其他方法可以使用方法来完成这个任务?任何帮助都将不胜感激。谢谢。
3个回答

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()));

编辑:考虑使用颜色选择器。请参见如何使用颜色选择器


-1:仅适用于预定义颜色,不适用于用户定义的颜色 - Aubin - user1181445
1
建议使用Map<String, Color>来实现+1操作;对于任意命名颜色,建议采用反向映射。同时,考虑使用双向映射 - trashgod
1
@Legend,他可以提供一种注册用户定义颜色的方法——通过将新值放入映射中。 - shuangwhywhy

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
Eng.Fouad为我做得很好,没有什么可补充的,完美并且已点赞。 - Aubin
那么你在这里没有任何贡献。而且,据我所知,他的工作仅适用于预定义的颜色。 - user1181445

0

不确定是否有更好的方法,但你可以这样做:

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

如果我们有256种颜色,那么在需要颜色的地方,您会添加256 * 3行代码吗? - Aubin
1
@Aubin 没错,这是一种非常原始的方法,但根据用户被允许使用多少不同颜色,它可能是有效的。 - Boyen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接