我正在尝试使用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数组来改变颜色的方法,但我想尝试这种方法。
我做错了什么?
此致
答案 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);