java - 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 秒,然后变为黄色。
解决方案
推荐阅读
- python - 如何为 TfidfVectorizer 使用列表列表或集合列表?
- r - 在 r 中为股票每小时数据创建 ts 对象
- android - 从 Google Cloud Firestore 获取 JSON 对象
- c# - 如果我们在 C# 中使用 convert.ToDouble 选项,如何使用 Math.Round 选项进行四舍五入到 2 位小数?
- php - 一个网站可以没有 HTML 存在吗?
- c++ - g++ 错误:没有匹配函数调用“fpclassify(float&)”
- c# - 表单 POST 后 MVC 模型向控制器返回 null
- android - 更改其容器内的 SeekBar 位置
- signal-processing - 通过谐波数生成直方图
- c# - Error CS1503 Argument 1: cannot convert from 'string[]' to 'string' for folders found