我试图让一个按钮调用另一个类中的方法来更新某些东西的颜色,但是它没有按照我的预期运行。问题是颜色改变一次但从未改变过。
这是发生变化的文件:
public class Status
{
//initial conditions
Color pedLightColor = Color.RED;
Color warnLightsColor = Color.GREEN;
Boolean GatesUp= true;
Color drawbridgeColor = Color.green;
public Status()
{
}
public Color getPedestrianStatus()
{
return pedLightColor;
}
public void setPedestrianColor(Color c)
{
if(c.equals(Color.RED))
{
pedLightColor=Color.green;
System.out.println("Pedestrian Light color changed to " + pedLightColor);
}
else
{
pedLightColor=Color.red;
System.out.println("Pedestrian Light color changed to " + pedLightColor);
}
}
}
,如下所示:
pedButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent event)
{
System.out.println("Control Unit/Pedestrian Button Clicked");
Status status = new Status();
status.setPedestrianColor(status.getPedestrianStatus());
System.out.println(status.getPedestrianStatus());
}
});
目前我相信我正在通过调用setPedestrianColor()方法并使用当前颜色作为参数来更改颜色。但是我不确定为什么一旦你按下按钮第二次颜色应该是绿色所以它应该变回红色,但事实并非如此。对于我出错的地方的任何建议都表示赞赏。
答案 0 :(得分:5)
您的Status
对象需要是全局的或以不同的方式实例化。颜色正在改变,然后在每次调用actionPerformed
后抛弃对象。所以它永远不会从红色变为绿色。
答案 1 :(得分:4)
这是因为每次按下按钮都会创建一个全新的Status
对象。
Status status = new Status();
考虑将status
声明为只初始化它的字段。