首页 > 解决方案 > JButton 可以通过 actionPerformed 方法完成的操作是否有限制?

问题描述

我的 Java 程序应该通过 JButton 来控制交通灯(由另一个类创建的对象)。按下 JButton 后,交通灯应该通过调用交通灯对象的方法从红色循环到绿色,然后是黄色并返回到红色。

交通灯对象有方法 .setGreen(); , .setYellow(); , .setRed(); 和 .wait(int 毫秒); 并通过 JFrame 直观地显示。默认情况下,它在启动时设置为红色。如果我尝试通过 JButton 以外的方式循环交通灯,该程序就可以正常工作。例如,当使用 for 循环时,会产生预期的结果。我目前的方法是让 JButton 调用循环方法,将交通灯对象移交给循环方法。在这种方法中,应该实现红绿灯循环。但是,此方法可以正确执行的操作数量似乎是有限的。如果循环方法只包含两条​​指令,例如 .wait(1000); 和 .setGreen(); , 预期输出正确产生。在打包更多关于此方法的说明后,

final JButton button_cycle = new JButton("Begin cycle");
        frame.add(button_cycle);
        ActionListener alcycle= new ActionListener() {
            @Override public void actionPerformed( ActionEvent button_cycle) {
                { 
                cycle(myLight);
                    }
            }
        };
                button_cycle.addActionListener(alcycle);   

public static void cycle(TrafficLight myLight)  {
            myLight.wait(1000);
            myLight.setGreen();
            myLight.wait(1000);
            myLight.setYellow();
            myLight.wait(1000);
            myLight.setRed();
        }

按下按钮后的预期结果是交通灯(默认为红色)等待 1 秒,切换到绿色,再等待 1 秒,切换到黄色,再等待 1 秒,然后切换回红色。运行程序会导致 JFrame 中的可视交通灯保持红色 3 秒,并且只执行最后一个 .set 操作。如果将循环方法中的最后一个操作更改为 myLight.setYellow(); 例如,红绿灯保持红色 3 秒,然后变为黄色。

标签: javaswingjbuttonactionlistener

解决方案


推荐阅读