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:
In der View versuche ich eine anonyme Klasse fürs Eventhandling zu registrieren:
tableChanged wird jedoch nie aufgerufen. Fehler treten keine auf. Das Programm läuft ansonsten. Was mache ich falsch?
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?