Sollte er dem Model nicht immer eine ganze Zeile übergeben (also 65 Spalten)? Deshalb sollte tabledata
auch nur ein eindimensionales Array sein das die Daten für eine Zeile aufnimmt. Und ich nehme an der Code oben ist nur ein Ausshnitt weil du nur in Spalte 4 einen Namen einfügst ?
Ich würde dir empfehlen keinen Vector zu benutzten, außer du willst etwas synchronisiert ablaufen lassen. In vielen Fällen möchte man das aber nicht und man verliert Performance. Die ArrayList kann das gleiche wie ein Vector hat jedoch den Vorteil das die nicht synchronisiert wird.
Wenn man nach Vector vs ArrayList googlet erhält man noch weitere und bessere Erklärungen.
Er hat das sicher so gemacht weil bei addRow ein Vector angegeben werden kann. Aber ich weiss nicht warum er es sich so schwer macht. Da es sich bei ihm ja scheinbar um eine Tabelle mit 65 Spalten vom Typ String handelt könnte er ja ganz einfach ein
"String[] tabledata = new String[65]" anlegen und seine Daten da rein schreiben. Und so sieht dann das
hinzufügen zum Model aus:
"tablePlanungModel.addRow(tabledata);"
Der ursprüngliche Fehler war ja nur dass tabledata zweidimensional war.
Na ich bin Neuling in Java und objektorientiert, das muss ich mir noch alles bisl im Kopf zurecht rücken.
Der Hintergrund ist Folgender:
Daten sollen aus einer Tabelle gelesen werden. Das dürften so ca. 20.000 Zellen werden, aber das variiert.
In der Tabelle möchte ich die Daten ändern können: Hinzufügen, Ändern und sogar das Löschen soll möglich sein. Nach Abschluss sollen die geänderten Zellen wieder in die Datenbank geschrieben werden. Vielleicht lasse ich die Veränderung auch sofort nach Verlassen der Zelle in der Datenbank speichern, das weiß ich noch nicht, was am effektivsten ist, ich werde beide Varianten testen.
Jedenfalls wollte das mit dem zweidimensionalen Array machen, damit ich jede Zelle ansprechen kann: Zeile, Spalte wie im Koordinatensystem.
Heisst das du wolltest dir die Daten ausserhalb der Tabelle noch einmal halten ? Du kannst das schon machen aber dann musst du beim addRow(...) eben die Zeilennummer mit angeben und nicht einfach die ganzen "tabledata".
Edit: aber bei deiner Vector-Lösung hast du das ja auch nicht so gemacht. Ein Vector steht doch für eine Zeile
Oh sorry, ich meinte die Daten kommen aus einer Datenbanktabelle (MySQL).
Die Daten sollen in der JTable manipuliert werden können und dann geht’s wieder zurück in die Datenbank.
Also anscheinend seht Ihr es so, das Vector wohl nicht so das richtige dafür ist. Dann werde ich es wieder auf Array ändern.
Ich werde mir sowieso noch mal das Thema Vector vs ArrayList genauer anschauen.
Table und TableModel bewerkstelligen ja gerade die Trennung von Daten und Anzeige. Da heisst er schreibt seine Daten in das TableModel Und gibt der Table das TableModel bekannt. Insofern braucht er doch nicht nochmal eine ArrayList um sich die Daten ausserdem nochmal zu merken. Das TableModel bietet ja Zugriffsmethoden auf die Daten. Verändert werden sie im TableModel und von da aus liest er sie wieder zur Speicherung in der Datenbank aus. Und so wie ich seinen ursprünglichen Code deute hatte er doch schon alles er hat die Daten nur nicht richtig in sein TableModel geschrieben.
Ich kenne mich leider mit Swing nicht so aus, deswegen ist mir das TableModel nicht bekannt, wenn es so eine Trennung schon gibt, dann kann mein Post ignoriert werden.
Wieso wird nun eine Array Vector ArrayList dann überhaupt benötigt. Dann kann man doch einfach direkt in das TableModel schreiben?
Edit: Das TableModel hat Methoden um ganze Zeilen, ganze Spalten, einzelne Werte mit Zeilen- und Spaltenangabe zu lesen und zu schreiben. Und es bewerkstelligt u.a. im Zusammenspiel mit Table auch die Koordination der Reihenfolge der Daten in den Zeilen, insbesondere wenn du die Elemente nach einzelnen Spalten umsortierst. Dann wird nur die Anzeige umsortiert. Nicht die Daten im Model und man braucht eine Zuordnung.