从字符串中调用颜色类型

时间:2014-01-24 02:05:14

标签: java colors

好的,所以我确信这很简单,但这里什么都没有:

所以说我在这里调用方法主,颜色是参数之一:

master("RED");

这是主方法:

public static void master(String color) {
   g.setColor(Color.color)
}

忽略g.SetColor,它来自你可能没有的类,关键是当我调用字符串值“RED”时,我打算将颜色设置为红色。否则我必须像这样手动完成:

g.setColor(Color.RED);

我很困惑为什么java在调用颜色字符串时没有识别颜色值。

3 个答案:

答案 0 :(得分:3)

您有一个名为color的参数。 Color.colorcolor类中查找名为Color的成员,但没有(我认为)。它与您的color参数有 nothing 。声明如

static Color RED = <whatever>;

Color包中定义您可以在程序中使用的名称。但是这些名称不会作为运行时可用的字符串存储在程序中(除了反射,但这可能太复杂了。)

您需要一个方法来查找某个表中的颜色名称字符串,并将其转换为Color。由于看起来getColor不起作用,您可能需要构建自己的Map<String,Color>并将其初始化为

m.put("RED", Color.RED);
m.put("BLUE", Color.BLUE);
...

tutorial详细说明了Map s。

答案 1 :(得分:3)

Color.RED正在调用一个常量值。您无法拨打Color."RED"

RED引用类Color中的静态字段,您不能使用String调用它。它与尝试使用String调用代码中的变量相同。它没有那种方式。

相反,请创建此方法:

public static void master(Color color) {
   g.setColor(color);
}

并将其称为:

master(Color.RED);

但是,如果您想使用String参数,则可以使用Color.parseColor

也许:

public static void master(String color) {
   g.setColor(Color.parseColor(color));
}

并将其称为:

master("#FF0000");

答案 2 :(得分:1)

Color对象和表示该对象的String值是两个完全不同的东西。

如果你想从一个字符串中获取java.awt.Color对象,例如“Red”,那么你必须使用某种方法将它转换为它所代表的颜色。

试试这个:

Color realColor = (Color) Color.class.getField(color).get(null);
g.setColor(realColor);

这将首先获取该String的相应Color对象,然后在获得Color对象后,它将调用setColor方法。


编辑:如果您只需要在该方法之外的其他位代码中指定颜色(并且它不必是字符串),那么您可以随时只需传递一个实际的Color对象。

例如,

public static void master(Color color) {
    g.setColor(color);
}

你可以在其他地方使用它作为

master(Color.RED);

这会使master()方法变得毫无用处(除非你在那里包含更多逻辑),但是当你不需要时它必须解析一个String颜色。