JTable in einem Tab aktualisieren aus anderem Tab heraus initiiert

UnkiDunki

Bekanntes Mitglied
Hi,

normalerweise habe ich keine Problem beim Aktualisieren einer JTable, da ich immer mit setModel() arbeite und das damit praktisch immer von selber geregelt wird, nur klappt das in diesem Fall irgendwie nicht...

Ich habe eine JTable in einem JPanel, was sich in einem Tab einer JTabbedPane befindet. Aus dieser Tabelle wähle ich einen Eintrag aus, der dann in einem nächsten Tab zur Bearbeitung geöffnet wird, beim Abspeichern dieses Eintrages soll sich natürlich auch die Tabelle dementsprechend aktualisiert werden, allerdings tut sich nichts...

Der bearbeitete Eintrag besitzt einen Listener, der beim erfolgreichen Aktualisieren das Update des TableModels initiiert, was auch klappt.
Das TableModel hat auch einen Listener, der beim erfolgreichen Aktualisieren seinerseits in der View das Neusetzen des Models auf die Tabelle startet.

Alle Methoden werden korrekt aufgerufen, was ich mir mit ner Konsolenausgabe bestätigt habe lassen.

Meine bisherigen Versuche:
- tableModel.fireTableDataChanged();
- und ein validate(), repaint() und updateUI() praktisch aller Komponenten. Von der JTable angefangen, über die TabbedPane und das Tab, bis hin zum Panel, in welchem die JTable störrisch nichts tut...

Kann das irgendwie nicht nachvollziehen. Geht es euch da anders? Wäre super 🙂

Vielen Dank schon mal für eure Anregungen!
 
Das TableModel hat auch einen Listener, der beim erfolgreichen Aktualisieren seinerseits in der View das Neusetzen des Models auf die Tabelle startet.
Das hört sich etwas merkwürdig an. Kriegt die Tabelle ein neues Model?
Normalerweise registriert sich die Tabelle mit setModel(...) als Listener am TableModel und dann müssen nur noch die Datenwerte in dem Model geändert werden und die Tabelle aktualisiert sich von alleine.
 
Sorry, hatte das falsch geschrieben... Das TableModel hat keinen Listener von mir, sondern das Model, in dem ich das TableModel neu erstelle... (probiere mich in MVC)...
Und daraufhin wird table.setModel() initiiert mit dem neu erstellen Model und ja, das ist merkwürdig, weil mit dem Setzen des neuen (aktualisierten) Models eigentlich die Tabelle grundsätzlich immer auch aktualisiert wird. Wie gesagt, hatte da grundsätzlich mit setModel() noch nie Probleme mit einer Tabelle und ihrer Aktualität...
 
Woran es jetzt bei Dir scheintert k.A. Vielleicht kannst Du ja man ein bisschen Bsp Code posten. Vielleicht zeigen irgendwelche Variablen auf unterschiedliche Referenzen.

Solange sich nur die Daten ändern und nicht die Struktur des Models, muss man kein neues Model erstellen.
JTable (View) und das TableModel (Model) sind bereits eine Implementierung des MVC, man muss sich nur noch den Controller drum herum basteln.
 
JTable (View) und das TableModel (Model) sind bereits eine Implementierung des MVC, man muss sich nur noch den Controller drum herum basteln.

Ja, ich weiss, aber hatte mir vorgenommen ein ganzes Projekt möglichst MVC-"konform" umzusetzen, wobei ich das jetzt irgendwie schon wieder verfluche... Was aber wohl nicht am MVC liegt, sondern allgemein wohl an meiner Programmierweise, denn irgendwie erreiche ich immer den Punkt an dem ich mir sage "Achhh ne, das geht alles noch viel besser und eleganter. Und da und dort ist wieder nur 'quick' und 'dirty'" Und dann würde ich am liebsten alles hinschmeißen und das ganze Projekt noch mal von vorne beginnen. Nur um danach wieder an den Punkt zu gelangen. Ein Teufelskreis. Wenigstens kann ich aber sagen, dass ich mich so immer verbesser, aber motivierend ist das ganze irgendwie nicht... So mal Luft gemacht 🙂

ACHJA: Den Fehler habe ich übrigens gefunden. Das Aktualisieren der Tabelle hat alles einwandfrei funktioniert, nur hatte ich beim Übernehmen der Objektwerte irgendwie einen Dreher drin, er hat mir Werte in der DB aktualisiert, die danach wieder mit den alten überschrieben wurden. So oder so ähnlich 🙂 Hat gedauert, bis ich da erst mal drauf gekommen bin! Jetzt habe ich das ganze umgeschrieben und es funktioniert wie es soll 🙂

Danke dir trotzdem für dein Interesse!
 

Zurück
Oben