Hallo Leute!
Ich habe hier einen JTable mit zugehörigem TableModel, das auf einem
Vektor beruht. Ich möchte nun eine Funktion mit der der Table auf
seine ursprüngliche Werte zurückgesetzt wird (ala Änderungen
verwerfen). Dazu habe ich eine Funktion reset im TableModel
implementiert mittels der der Datenvektor auf die ursprüngliche
Version gesetzt wird. Das funktioniert auch soweit. Allerdings bleibt
die sichtbare Version des Tables unberührt und zeigt weiterhin die
editierte Version an, obwohl ich ein fireTableDataChanged eingefügt
habe. Ich habe auch versucht den JTable einfach nochmal neu mittels
table = new JTable (TableModel); zu erstellen. Aber das GUI zeigt mir
weiterhin keine Änderung.
Vielen Dank schonmal für Eure Hilfe!
Gruß
Edi
Hallo,
Du solltest dazu ein Design-Pattern namens Memento benutzen. So speichert man Objekte in verschiedenen Versionen und holt sie wieder zurück.
Vermutlich musst Du noch ein doLayout() oder so was ausführen.
Schau mal nach, ob Du auch das richtige TableModell geändert hast.
Notfalls einfach die gesamte JTable im Viewport ersetzen.
Gruß
Peter
Hallo,
Du solltest dazu ein Design-Pattern namens Memento benutzen.
So speichert man Objekte in verschiedenen Versionen und holt
sie wieder zurück.
Hallo Peter!
Soweit ich das jetzt auf anderen Seiten nachlesen konnte habe ich
sowas praktisch schon gemacht. Ich habe den DatenVektor, der dem
TableModell zugrunde liegt praktisch in einer alten Version
dupliziert. Nun soll dieser alte Vektor wieder eingesetzt werden.
Dazu habe ich eine Methode in das TableModell eingefügt die so
lautet:
public void reset () {
data = new Vector (initialData);
System.out.println (data);
}
data ist der DatenVektor, initialData eine ältere Version des
Vektors. Der Vektor wird auf jeden Fall richtig zurückgesetzt (dazu
die print-Zeile).
Vermutlich musst Du noch ein doLayout() oder so was ausführen.
Wie genau müsste das dann aussehen. Ich hab es gerade nochmal mit
folgender Version probiert:
public void reset (){
tableModel.reset ();
answerTable = new JTable (tableModel);
answerTable.doLayout();
}
Aber das Ergebnis bleibt gleich, am Table ändert sich nix.
Schau mal nach, ob Du auch das richtige TableModell geändert
hast.
Hab ich auf jeden Fall (hab bisher nur eins geschrieben
).
Notfalls einfach die gesamte JTable im Viewport ersetzen.
Wie das? Könntest du das noch etwas näher ausführen?
Vielen Dank schon mal
Edi
data = new Vector (initialData);
System.out.println (data);
Das scheint mir das Problem zu sein. Im Prinzip änderst du nicht das bestehende Model sondern machst ein neues.
Du solltest dem bestehenden Model alle Zeilen entfernen und die neuen(alten) wieder neu addieren. Ein new… scheint mir hier fehl am Platz.
Michael
1 „Gefällt mir“
Hallo Edi,
ich habe das so programmiert, indem ich die Methode setModel(TableModel dataModel) aufgerufen habe. Dann hat alles sofort geklappt.
Wenn Du die Methode Deiner JTable so etwa umschreibst müsste es klappen.
public void reset() {
this.setModel(storedData);
}
Gruß
Peter
Hi Michael!
Stimmt da war das Problem gelegen. Es funzt jetzt.
Vielen Dank nochmal
Edi