2013-04-03 103 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

相關問題