2013-04-03 31 views
1

我刚刚完成了一个项目,涉及创建一个迷宫和编程三个“机器人”,使用不同的策略穿过它。参与我的实现类是:图形用户界面没有正确更新

  • 一个抽象类机器人的三个子类
  • 它处理的迷宫
  • 一个JFrame类,以图形方式显示迷宫,展示了机器人的逻辑操作的迷宫类通过它

最后感动,我有一个入口点,只有一个包含以下主要方法:

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

这个功能完美 - 迷宫显示在GUI上,我可以看到机器人在其中移动,直到达到最终效果。

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

为什么当机器人由main方法创建时,GU​​I更新正确,但是当它由JFrame类创建时,它不会正确更新?

我不确定你需要看到什么代码来帮助我,所以让我知道你需要看什么。

+0

请出示你的'go'方法和您认为应该把/从视图中删除你的机器人任何部分。 –

+0

你可以发布你的源代码吗?我认为这个问题可能在机器人课上。 –

+1

听起来好像你正在更新机器人在EDT中的位置,可能在某种循环中。阻止事件派发线程的任何操作,同时阻止它分派/处理绘画请求。你还没有提供任何代码,所以我只是猜测 – MadProgrammer

回答

2

使用javax.swing.Timer来调整动画,如FleetPanel所示。在每个滴答声中,计时器的听众应该只渲染机器人。

image