2009-02-18 5 views
5

Wie ist die Beziehung zwischen einem JTable, TableModel und TableData? Wenn ich nur die TableData ändern, ändert das auch die Datenanzeige auf der Komponente JTable oder ich muss eine Methode aufrufen, um die beiden zu synchronisieren. Ich habe this angesehen, aber es nicht explizit erzählt oder zeigt mir die Beziehung in Bezug auf UpdatesBeziehung zwischen JTable, TableModel & TableData

Antwort

5

Wenn Sie einen Wert in den TableModel-Daten ändern, müssen Sie dieses Ereignis auslösen. z.B. Ändern Sie den Wert einer Zelle, rufen Sie fireTableCellUpdated(row, col);.

Betrachten Sie this genauer.

+2

fireTableCellUpdated (Zeile, Spalte) gilt nur für TableModels, die Unterklassen von AbstractTableModel sind. –

2

Ich nehme an, Sie verwenden den Ausdruck "TableData", um nur die Daten zu meinen, die in der JTable angezeigt werden. Ob Sie automatische Updates sehen oder nicht, hängt von Ihrem TableModel ab und davon, wie es mit Ihren Daten interagiert.

Ein TableModel sollte Ereignisse auslösen, wenn sich das zugrunde liegende Datenmodell geändert hat. Dies wiederum teilt der JTable mit, dass eine Änderung aufgetreten ist und neu gezeichnet werden sollte. Im Hinblick auf eine Beziehung hört die JTable Ereignisänderungen auf dem TableModel ab; Das TableModel kennt die JTable nicht.

Je nachdem, wie Ihr Modell organisiert ist, können sich die darunter liegenden Daten ändern, ohne dass das TableModel dies erkennt. Wenn Sie in diesem Fall eine direkte Passthrough-Funktion vom TableModel zu den Daten haben, ändern sich die Werte auf dem Bildschirm, wenn ein Repaint auftritt (Bildschirmgröße, Mausbewegung usw.), aber Sie möchten das Ereignis erzwingen, das Sie erhalten sollen TableModel, um die JTable über die oben genannten Ereignisse zu benachrichtigen. In Bezug auf die Beziehung kennt das TableModel die Tabellendaten, aber die Tabellendaten kennen das Modell normalerweise nicht. Das TableModel überwacht möglicherweise die Daten auf Änderungen oder nicht.

2

Beim Festlegen des TableModel in einer JTable fügt die Tabelle einen Observer hinzu (TableModelListener), um sich über Änderungen im Modell zu informieren.

Beim Ändern von Daten im Modell wird erwartet, dass das Modell die registrierten Listener benachrichtigt, indem es eine TableModelEvent auslöst. Das Ereignis selbst kann zusätzliche Informationen über die Granularität der Änderung enthalten (ob sich die Struktur signifikant geändert hat oder nur einige Zelldaten geändert wurden), damit die JTable eine optimierte Ansichtsaktualisierung durchführen kann.

Verwandte Themen