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

标签 java user-interface jframe

我正在尝试将交通灯从红色更改为黄色再更改为绿色,并在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/

相关文章:

Java switch 语句绕过所有情况,甚至默认情况

java - NIO - 检测关闭的连接

java - 从 Java 内部执行查询以创建函数

java - JFrame 中的 LWJGL 显示在 OSX 上性能较差

Java 鼠标 - 图形字符串 - 获取相对于背景图像的鼠标 X 和 Y

java - JFrame 和 jpanel Action 监听器

java - 如何获取引用的项目或库的名称?

java - 为什么 getDocumentFilter 需要转换为 AbstractDocument?

user-interface - Firefox OS UI 构建方法

java - 如何控制使用类加载器加载的 Canvas ?