KP Create& Learn - Gruppe 3 - Programmierung

"History-Funktion" - javax.swing.undo

"History-Funktion" - javax.swing.undo

javax.swing.undo hat die Undo/ Redo-Funktionalität schon sehr schön implementiert. (Siehe auch Implementing Undo and Redo.) Sollten wir uns angucken zum Nachmachen oder Verwenden. Wobei wir's wahrscheinlich selbst schreiben müssen, da wir den Verlauf speichern wollen. An die Liste mit allen 'Edits' kommt man hier offenbar nicht mehr ran. Außerdem löst dieses Package unser Hauptproblem noch nicht, nämlich die Datenelemente ('Edits') - und wie man mit ihnen umzugehen hat - zu beschreiben.

Re: "History-Funktion" - javax.swing.undo

Ich habe mir mal ein paar Gedanken zur Datenstruktur der Edits gemacht. Dazu habe ich mir aufgeschrieben, welche Informationen für Undo und Redo benötigt werden. Jeweils für die Fälle:
Objekt wird verschoben (benötigt 2x Positionen, 2x Objekteigenschaften (!))
DO: #setze neue Position des verschobenen Objekts
# entferne ggf. altes Objekt von neuer Postion
UNDO: # setze Objekt auf alte Position zurück
# stelle ggf. vorher gelöschtes Objekt wieder her (erzeuge neue Instanz mit den selben Eigenschaften)
Objekt wird gelöscht (benötigt 1x Postion, 1x Objekteigenschaften)
DO: #entferne das Objekt
UNDO: #stelle das Objekt an seiner alten Position wieder her (erzeuge neue Instanz mit den selben Eigenschaften)
neues Objekt aus Palette einfügen (benötigt 1x Pos., 2x Obj)
DO: # Erstelle neue Instanz, setze auf neue Position
# entferne ggf. altes Objekt von neuer Postion
UNDO: # lösche Objektinstanz
# stelle ggf. vorher gelöschtes Objekt wieder her

Fazit: Man benötigt im schlimmsten Fall 2 Positionsdaten (Punktkoordinaten) und 2 Objektdaten. Das 'Historyobjekt', nennen wir es mal UndoableEdit könnte wie folgt initialisiert werden:
UndoableEdit(Point formerPosition, MovObject formerObject, Point newPosition, MovObject newObject)
Nicht benötigte Felder einfach mit null ausfüllen. Daran erkennt das Programm dann auch, welchen Fall es behandeln muss.