Model-View Problem JTable
-
Hi,
ich bin ein Anfänger auf dem Swing gebiet und will folgenden Anwendungsfall realisieren:
Eine Gui stellt einen JTable mit initial 'n' Datensätzen bereit. Die Einträge sind ungefähr so aufgebaut
name, value, attr1, attr2, comment
.name - kann vom user geändert werden.
.value - hängt direkt vom name ab. Ändert sich permanent. Wird von einem Thread aus aktualisiert.
.attr1 - Attribut aus einer vordefinierten Liste
.attr2 - Attribut aus einer vordefinierten Liste, die von attr1 abhängt. D.h. die Liste ändert sich, wenn attr1 sich ändert.
.comment - kann vom user festgelegt werden.Die Daten werden aus einer DB gelesen und sollen bei Klick auf einen Button in die Datenbank zurückgeschrieben werden. Selbstverständlich soll der User in der Lage sein, Einträge aus der JTable zu editieren, zu löschen, einzufügen.
Nun zu meinen Fragen:
Der Gedanke war, eine Komponente zu schreiben, die einen JTable bereitstellt. Das TableModel würde einfach eine Liste der Dateneinträge beinhalten.
-Was passiert jetzt, wenn der User einen Eintrag modifiziert, d.h. z.B. value ändert? Die Änderung soll ja nicht sofort in die DB geschrieben werden. Wir der Wert trotzdem sofort ins Model geschrieben, d.h. der Eintrag in der Liste, der zur row passt wird entsprechend modifiziert?
-Wenn der User Einträge löscht, dann kann ich die ja nicht direkt aus dem Model löschen, da ich nachher sonst nicht mehr wüsste, das ich ihn löschen muss.
-Was passiert, wenn einfach ein neuer Eintrag zwischen zwei Bestehenden eingefügt werden soll? Verschiebe ich die Einträge in meinem Model?Das sollte fürs erste reichen. Später hätte ich noch Fragen zu Renderern, Editoren und so
Vielen Dank für die Hilfe
Gruß
-
1.) value soll er ja nicht ändern können, oder? Aber ja, wenn ein Benutzer einen Zelleintrag editiert und das Modell dieses auch akzeptiert (siehe Methode setValue() und isEditable()) und korrekt verarbeitet, so ist die Datenbasis, die dem Modell zu Grunde liegt, auch modifiziert.
Die DB ist davon nicht betroffen; die Daten müssen erst synchronisiert werden (es sei denn, das TableModel ist so geschrieben, dass es direkt ein UPDATE auf die Datenbankdatei durchführt).2.) Ist der zweite Stichpunkt eine Frage?
3.) Ja was passiert dann? Die Datenbasis des TableModel-Exemplars erhält einen neuen Satz (z.B. ein Object-Array). Dieses kann irgendwo eine Kennzeichnung 'neu' (oder id=0) erhalten und später in die Datenbank eingefügt werden.
Als Datenbasis für solche Aufgaben eignet sich beispielsweise javax.sql.rowset.CachedRowSet gut.