2

我正在尝试使用 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()]));
                    }
                }
            }
    );
}

}

我还尝试了仅包含颜色名称的字符串数组,例如 YELLOW、RED、BLUE。但它没有用。

我知道通过创建一个类颜色数组来改变颜色的另一种方法,但我想尝试这种方法。

我究竟做错了什么?

问候

4

2 回答 2

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);
于 2012-10-29T16:04:51.557 回答
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);
于 2012-10-29T16:15:57.940 回答