gpt4 book ai didi

java - 更改交通灯java切换按钮的状态

转载 作者:行者123 更新时间:2023-11-30 06:50:15 26 4
gpt4 key购买 nike

我正在尝试将交通灯从红色更改为黄色再更改为绿色,并在java中重复,并通过按一个按钮来启动此过程。这是我的代码:

public class TrafficLight extends JFrame implements ActionListener {
JButton b1, b2, b3;

Signal green = new Signal(Color.green);
Signal yellow = new Signal(Color.yellow);
Signal red = new Signal(Color.red);

public TrafficLight(){
super("Traffic Light");
getContentPane().setLayout(new GridLayout(2, 1));
b1 = new JButton("Change State");
b1.addActionListener(this);


green.turnOn(false);
yellow.turnOn(false);
red.turnOn(true);

JPanel p1 = new JPanel(new GridLayout(3,1));
p1.add(red);
p1.add(yellow);
p1.add(green);
JPanel p2 = new JPanel(new FlowLayout());
p2.add(b1);


getContentPane().add(p1);
getContentPane().add(p2);
pack();
}

我知道必须有其他 if/else 语句,但我不确定这是否是我应该进入的最佳方向。

public void actionPerformed(ActionEvent e){        
if (e.getSource() == b1){
green.turnOn(false);
yellow.turnOn(false);
red.turnOn(true);

}
}

最佳答案

如果您有 Java8,您可以像这样循环任何集合:

List<Color> colors = Arrays.asList(GREEN, YELLOW, RED);
Iterator<Color> loop = Stream.generate(() -> colors).flatMap(List::stream).iterator();

完成后(并将此迭代器保存在某处,因为那是您的应用程序状态):

actionPerformed(ActionEvent e) {
Color clr = loop.next();
if (clr == GREEN) {
green.turnOn(true);
yellow.turnOn(false);
red.turnOn(false);
}
//<continue there for other colors>
}

我个人还建议进一步抽象,以便您的颜色分别代表一个应用程序状态,因此您的 Color 是一个类

interface Color {
void activate();
}

您的事件监听器将仅调用

loop.next().activate();

所有必要的工作都将在该方法内完成,而不是在监听器内完成。

继续使用抽象路径还允许您添加,例如,在前一盏灯关闭之前闪烁。

关于java - 更改交通灯java切换按钮的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42955083/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com