Neues TableModel und JTable wird nicht refreshed

woohoo

Mitglied
Hallo,

ich habe eine JTable mit DefaultTableModel mit der ich Werte aus einer Datenbank anzeige. Nachdem ich alle Werte einer Tabelle hereingeladen habe möchte ich auf ein Feld einschränken und führe ein neues SQL-Statement aus, wofür ich einfach das alte TableModel wegschmeiße (ich mache ein tableModel = new ...)

Beim Debuggen hat das TableModel die richtige Anzahl an Zeilen und Spalten, die JTable wird aber nicht refreshed. fireTableDataChanged bringt nichts, JTable.repaint bringt auch nichts ....

Was mache ich da falsch?

Lg,
wooohoo
 
wenn du ein neues TableModel-Objekt erstellt, juckt das die JTable natürlich nicht, die weiter ihr altes Model kennt,
dann musst du setModel() an der JTable aufrufen,

oder das alte Model behalten, Daten ändern, und fireTableDataChanged() dort
 
JTable.setModel(neuesModel) scheint prinzipiell etwas problematisch zu sein, bekomme dann diese Exception

Java:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2 >= 2
at java.util.Vector.elementAt(Unknown Source)
at javax.swing.table.DefaultTableColumnModel.getColumn(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paintCells(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paint(Unknown Source)
at javax.swing.plaf.ComponentUI.update(Unknown Source)
at javax.swing.JComponent.paintComponent(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintWithOffscreenBuffer(Unknown Source)
at javax.swing.JComponent.paintDoubleBuffered(Unknown Source)
at javax.swing.JComponent._paintImmediately(Unknown Source)
at javax.swing.JComponent.paintImmediately(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Hab mich dafür entschieden, dass alte Model zu behalten, ist eigentlich eh die schönere Lösung ...

Danke!! 🙂
 
bei beiden können Änderungen aus einem separaten Thread böse enden, wenn die GUI gleichzeitig zugreift,
es ist ja offensichtlich dass dort nicht jeder Index-Zugriff vorher durch Abfrage geschützt ist und selbst wenn ohne Synchronisation nicht ausreichend,

SwingUtilities.invokeLater() bei jeder Änderung der GUI-Daten (nur für Eintragen, nicht für die langen Sekunden der Berechnung)
 

Zurück
Oben