Color.getColor(String name)不起作用

时间:2012-10-29 16:02:40

标签: java swing user-interface

我正在尝试使用getColor(String name)函数更改颜色,但似乎无法正常工作。可能我正在做某种错误。这是代码:

public class ComboBoxPractice extends JFrame{

private String names={"Color.YELLOW","Color.RED","Color.GREEN"};

public ComboBoxPractice()
{
    ...

    box.addItemListener(

            new ItemListener()
            {
                public void itemStateChanged(ItemEvent event)
                {
                    if(event.getStateChange()==event.SELECTED)
                    {
                        getContentPane().setBackground(Color.getColor(names[box.getSelectedIndex()]));
                    }
                }
            }
    );
}

}

我也尝试过仅包含Color名称的String数组,如YELLOW,RED,BLUE。但它没有工作。

我知道另一种通过制作Class Color数组来改变颜色的方法,但我想尝试这种方法。

我做错了什么?

此致

2 个答案:

答案 0 :(得分:4)

将Color类用作:

 private Color[] colors ={Color.YELLOW,Color.RED,Color.GREEN};

如果您使用Color类,则可以将以下语句更新为:

    getContentPane().setBackground(Color.getColor(names[box.getSelectedIndex()]));

作为

    getContentPane().setBackground(colors[box.getSelectedIndex()]);

或将名称用作“黑色”,“红色”等。

    private String[] names={"yellow","red","green"};

如果您决定使用上面的颜色名称,那么您可以使用反射获取Color对象,如下所示:

    Field field = Color.class.getField(names[0]);
    Color color = (Color)field.get(null);

答案 1 :(得分:1)

另一种方法是使用反射从字段名称中获取Color个实例,例如:

Field field = Color.class.getField("YELLOW");
Color c = (Color)field.get(null);

注意颜色字符串如何不包含实际的类名。对于这个应用程序,它看起来像这样:

Field field = Color.class.getField(names[box.getSelectedIndex()]);
Color backgroundColor = (Color)field.get(null);