好的,所以我确信这很简单,但这里什么都没有:
所以说我在这里调用方法主,颜色是参数之一:
master("RED");
这是主方法:
public static void master(String color) {
g.setColor(Color.color)
}
忽略g.SetColor,它来自你可能没有的类,关键是当我调用字符串值“RED”时,我打算将颜色设置为红色。否则我必须像这样手动完成:
g.setColor(Color.RED);
我很困惑为什么java在调用颜色字符串时没有识别颜色值。
答案 0 :(得分:3)
您有一个名为color
的参数。 Color.color
在color
类中查找名为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颜色。