如何通过构造函数中的String参数更改JPanel的背景颜色?

时间:2015-07-09 22:04:56

标签: java swing colors jpanel

我有一个程序,我希望在通过构造函数创建对象时设置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);

    } 

2 个答案:

答案 0 :(得分:1)

  

我想知道是否有某种方法可以直接将字符串参数传递给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);
    }

}

答案 1 :(得分:0)

最简单的方法是将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));