Swing Auf Änderungen eines Models in der View einer JTable reagieren

svennie

Mitglied
Hi ich habe da ein kleines Problem mit einer JTable und wäre froh, wenn mir einer helfen kann.
Zur Ausgangssituation:
In der Tabelle werden Daten dargestellt, die der User teilweise ändern kann. Ändert er den Wert einer Zelle, berechnet das Model die Tabelle neu, und ändert dabei einige andere Werte. Dabei kann es passieren, dass sich die Reihenfolge der einzelnen Zeilen ändert. Die View zeigt nach der Änderung alle Daten korrekt an, nur ist leider die aktuell selektierte Zeile nicht mehr richtig. Nehmen wir als Beispiel an, dass ich 2 Zeilen mit Daten habe. Ich ändere einen Wert in Zeile 1, so dass die Sortierung geändert wird und beide Zeilen vertauscht werden. Die Selektion liegt immer noch in der ersten Zeile, wobei dies ja die alte 2. Zeile ist. Ich hätte gerne, dass die Selektion mitwandert. Ich dachte, dass ich meine View benachrichtigen lasse, wenn sich die Daten ändern, und dann händisch prüfe, ob die Selektion angepasst werden muss, und dies dann ggf. tue. Doch dieser Code wird nie ausgeführt.

Zur Implementierung:

Ich habe ein eigens Model definiert:

Java:
public class myModel
extends AbstractTableModel
{
	@Override
	public void setValueAt(Object aValue, int rowIndex, int colIndex)
	{
		//Daten aktualisieren, Felder neu berechnen, und umsortieren
		...
		
		this.fireTableDataChanged();
	}
}

In der View versuche ich eine anonyme Klasse fürs Eventhandling zu registrieren:

Java:
myTable.getModel().addTableModelListener(new TableModelListener() {

            @Override
            public void tableChanged(TableModelEvent e) {
                System.out.println("Selektion muss geändert werden");
            }
        });

tableChanged wird jedoch nie aufgerufen. Fehler treten keine auf. Das Programm läuft ansonsten. Was mache ich falsch?
 
Ok. Habe den Fehler gefunden.
Man sollte halt schon sicherstellen, dass man das Model nicht gegen ein anderes tauscht, nachdem man den Listener registriert hat...
 

Zurück
Oben