/ / GUI nie aktualizuje się poprawnie - java, swing

GUI nie aktualizuje się prawidłowo - java, swing

Właśnie ukończyłem projekt, który obejmuje tworzenie labiryntu i programowanie trzech "robotów", aby przejść przez niego za pomocą różnych strategii. Zajęcia związane z moją realizacją to:

  • Klasa abstrakcyjna Robot z trzema podklasami
  • klasa Maze, która obsługuje logiczne operacje w labiryncie
  • klasa JFrame, która wyświetla graficznie labirynt i pokazuje poruszającego się robota

Wreszcie mam punkt wejścia z główną metodą, która zawiera tylko następujące:

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

Działa to doskonale - labirynt jest wyświetlany na GUI i mogę obserwować, jak robot porusza się nim aż do końca - pożądany efekt.

Mój problem jest następujący: Na górze JFrame znajdują się trzy przyciski, każdy z ActionListener, który tworzy wystąpienia jednego z typów robotów i wywołuje metodę go, co powoduje, że porusza się, dopóki nie znajdzie się w "komórce wykończeniowej". Kiedy klikam jeden z tych przycisków, robot jest tworzony i zaczyna się poruszać (co mogę sprawdzić za pomocą instrukcji println wykonywanych przy każdym ruchu), ale nie widzę, jak robot porusza się po GUI. Interfejs GUI jest aktualizowany tylko wtedy, gdy robot osiągnie koniec (tj. Gdy metoda go () zostanie zakończona), w którym to momencie wyświetlana jest cała ścieżka wykonana przez robota.

Dlaczego GUI aktualizuje się prawidłowo, gdy robot jest tworzony przez główną metodę, ale nie wtedy, gdy jest tworzony przez klasę JFrame?

Nie jestem pewien, jaki kod będziesz potrzebować, aby mi w tym pomóc, więc daj mi znać, co powinieneś zobaczyć.

Odpowiedzi:

2 dla odpowiedzi № 1

Użyć javax.swing.Timer aby nadążyć za animacją, jak pokazano w tym FleetPanel. Przy każdym tiku, słuchacz timera powinien renderować tylko działające roboty.

obraz