Skip to Content

Stufe 2: Swing mit Layout Manager

In der zweiten Phase werden viele Zellen mit JButtons zu einem Feld zusammengefaßt.

Layout

Nutzen Sie einen Layoutmanager mit dem Sie Oben das Feld darstellen können und unten die Statusinformationen. Was bietet sich hier an?

Welcher Layoutmanager bietet sich für das Feld an?

Unten sollen Sie zwei Komponenten implementieren, einen Text und einen variablen Text. Welcher Layoutmanager bietet sich hier an?

Komponenten

Welche Komponenten benötigen Sie?

Pull-down Menü

Implementieren Sie das Pull-down Menü.

Das Feld soll editierbar sein oder schreibgeschützt. Welche Komponente bietet sich hier an?

Implementieren Sie eine Textausgabe für Weg finden, Oeffnen, Speichern. Diese Funktionen werden in späteren Phasen implementiert.

Implementieren Sie Editieren, Loeschen, Beenden.

Labyrinth ohne Menü

GUI mit ausgeklapptem Menü

Labyrinth mit Menue

 

Klasse Backtrack

Zur Klasse Backtrack gibt es einige Entwurfsüberlegungen. Die Klasse soll in den nächsten Stufen in der Lage sein das Laden und Speichern von Dateien zu unterstützen. Sie soll es auch erlauben, dass die Suchalgorithmen eingebunden werden.

Dies kann man erreichen in dem man alle Aktionen des Pull-Down Menüs als eigene Methoden implementiert. Die Methoden für spätere Phasen machen nur ein Update im Textfeld. So kann man sehen, dass sie aufgerufen werden. In den späteren Phasen wird dann die Klasse Backtrack spezialisiert und die entsprechenden Methoden überschrieben.

Dadurch kann man auf den Code der vorhergehenden Klasse zurückgreifen und muss den Code nicht replizieren.

Hierzu muss man das GUI in einer Instanz von Backtrack implementieren. Das GUI der vorhergehenden Phase wurde als statische Methode in Zelle implementiert. Dies ist hier nicht geschickt.

Um das Editieren zur ermöglichlichen muß der Benutzer einen aus mehren Zuständen auswählen. Dies kann man mit der Klasse javax.swing.JCheckBoxMenuItem erreichen.

Klasse Labyrinth

Die Klasse Labyrinth dient zum Darstellen und Speichern des Labyrinths. Sie enthält keine Aspekte der Benutzeroberfläche. Das Labyrinth wird von Backtrack benutzt um die entsprechenden graphischen Elemente korrekt anzuzeigen.

Das GUI immer etwas sinnvolles anzeigen soll, wird ein Labyrinth nach dem Laden immer in das Labyrinth umkopiert welches zur Anzeige benutzt wird. Jeder JButton (Zelle) hat einen Zeiger auf eine Position. Würde man den neuen Zustand nicht in ein Objekt der Klasse Position umkopieren müsste man alle Zeiger der Zellenobjekte auf die neuen Objekte des Labyrinths ändern.

Die Klasse Labyrinth hat deshalb zwei Konstruktoren

  • einen Copy-Konstruktor
  • einen Konstruktor mit den Dimensionen und der Start und Ziel-Position
    • Hier ist es wichtig die Koordinaten der Start- und Ziel Objekte zu nutzen und die dazu passenden Objekte im Feld zu identifizieren.

Die Methode update() kopiert ein existierendes Labyrinth in ein anderes um.

getPos() ist eine Bequemlichkeitsmethode die in den späteren Phasen beim Suchen helfen wird.

UML

uml Diagramm

Die Klasse Labyrinth wird alle Information enthalten die gespeichert werden:

  • Labyrinth
  • Position 

Die Klasse Labyrinth enthält Zeiger auf den Start und das Ziel des Labyrinths. Diese beiden Objekte müssen Teile des Feldes sein welches angezeigt wird!

Die Klassen die zum GUI gehören sind:

  • Backtrack
  • Zelle

.

 

Musterlösung

Github Projekt scalingbits/dhbwjava

 



book | by Dr. Radut