我有一个程序,我想在JPanel
的对象通过其构造函数创建时设置其颜色。这是我现在有的。
然而,这显然是相当低效的。我想知道是否有某种方法可以将字符串参数直接传递到setBackground()方法中来设置颜色?
MyPanel(String bcolor) {
super();
if (bcolor.equals("red"))
setBackground(Color.RED);
if (bcolor.equals("blue"))
setBackground(Color.BLUE);
if (bcolor.equals("green"))
setBackground(Color.GREEN);
if (bcolor.equals("white"))
setBackground(Color.WHITE);
if (bcolor.equals("black"))
setBackground(Color.BLACK);
}
我想知道是否有某种方式我可以将字符串参数直接传递到setBackground()方法来设置颜色?
显然没有,因为没有setBackground(String)
方法。
现在,您可能会使用许多可能的解决方案,您当前的if
语句系列是一种解决方案,另一种可能是使用static
Map
的一些国王,它充当String
值和您想要使用的Color
之间的查找,例如…
public class MyPanel extends JPanel {
protected static final Map<String, Color> COLOR_MAP = new HashMap<>();
public MyPanel(String color) {
setBackground(COLOR_MAP.get(color.toLowerCase()));
}
static {
COLOR_MAP.put("red", Color.RED);
COLOR_MAP.put("blue", Color.BLUE);
COLOR_MAP.put("green", Color.GREEN);
COLOR_MAP.put("white", Color.WHITE);
COLOR_MAP.put("black", Color.BLACK);
}
}
最简单的方法是在构造函数中传递您想要的颜色的RGB值。
MyPanel(int r, int g, int b){
super();
setBackground(new Color(r,g,b));
}
如果你真的,真的想使用字符串,你可以这样做
String colorName; //note that this has to be exact spelling and capitalization of the fields in the Color class.
Field field = Class.forName("java.awt.Color").getField(colorName);
setBackground((Color) field.get(null));