java - GUI 未正确更新

标签 java swing

我刚刚完成了一个项目,该项目涉及创建一个迷宫并对三个“机器人”进行编程以使用不同的策略穿过迷宫。我的实现涉及到的类有:

  • 具有三个子类的抽象类 Robot
  • 处理迷宫逻辑操作的 Maze 类
  • 一个 JFrame 类,以图形方式显示迷宫并显示机器人在迷宫中移动

最后,我有一个带有 main 方法的入口点,其中仅包含以下内容:

    Maze m = new Maze();
    MazeFrame mf = new MazeFrame(m);
    RightHandRobot mr = new RightHandRobot(m, mf);
    mr.go(m);

这工作得很好 - 迷宫显示在 GUI 上,我可以看到机器人在其中移动,直到到达终点 - 达到了预期的效果。

我的问题是这样的:JFrame 顶部有三个按钮,每个按钮都有一个 ActionListener,用于创建一种机器人类型的实例并调用其 go 方法,这会导致它移动直到“完成”细胞”。当我单击这些按钮之一时,机器人就会创建并开始移动(我可以通过每次移动时执行的 println 语句来验证),但我在 GUI 上看不到机器人移动。 GUI 仅在机器人到达终点时(即 go() 方法完成时)更新,此时会显示机器人所走的整个路径。

为什么当通过 main 方法创建机器人时 GUI 可以正确更新,而当通过 JFrame 类创建机器人时则不能正确更新?

我不确定您需要查看什么代码来帮助我解决此问题,因此请让我知道您需要查看什么。

最佳答案

使用javax.swing.Timer来调整动画的速度,如FleetPanel所示。在每次滴答时,计时器的监听器应仅渲染正在运行的机器人。

image

关于java - GUI 未正确更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15778412/

相关文章:

java - JTree 线型和 Nimbus

java - 更改 JFileChooser 的目录

java - 如何打印触发事件的按钮名称?

java - 在后台运行服务器套接字代码,然后运行客户端代码

java - Selenium Grid 如何使用 Java 从中获取文件?

java - 如何获取在实际进度值之前的seekbar的进度值?

java - apache tomcat 8.0.9 没有突然启动

Java JLabel 数组在使用后删除元素

java - 为项目创建邮件应用程序

java - JComboBox 在被告知 addItemListener() 时抛出 NullPointerException