Hallo, bin mir nicht sicher, ob es sich um einen Fehler bei mir oder einen im Swing/JTable ist:
Ich habe zwei eigene CellEditor geschrieben mit Combobox und Spinner - im Prinzip das, was man auch in den ganzen Beispielen im Netz findet. Nun kommt es vor, daß die Tabelle selbst durch Useraktionen an anderer Stelle entleert und mit neuen Werten gefüllt wird. Klappt soweit auch.
Wenn nun aber zuletzt in einer Zeile der Editor aktiv war (z.B. Cursor noch im Spinner oder Combobox zwar geklickt aber dann doch den selben Wert ausgewählt, womit kein Event kommt um den Editor zu beenden) die in der neuen Tabelle gar nicht da ist (also weniger Zeilen) und dann dort eine andere Zeile gewählt wird, gibts eine Exception. Die Exception kommt von einem Vector des Table-Models (DefaultTableModel!), bei dem über die Grenzen hinaus zugegriffen wird: ein setValueAt() mit der alten Zeile, die es aber nicht mehr gibt.
Die eigentliche Frage: sollte beim löschen der Werte in der Tabelle (bzw. im TableModel) nicht eventuell aktive Editoren deaktiviert werden?
Ich helfe mir jetzt damit, den aktuellen CellEditor vorher abzufragen (getCellEditor()) und dann die cancel-Methode davon aufzurufen. Aber das kann doch kaum die Lösung sein.
Ich habe zwei eigene CellEditor geschrieben mit Combobox und Spinner - im Prinzip das, was man auch in den ganzen Beispielen im Netz findet. Nun kommt es vor, daß die Tabelle selbst durch Useraktionen an anderer Stelle entleert und mit neuen Werten gefüllt wird. Klappt soweit auch.
Wenn nun aber zuletzt in einer Zeile der Editor aktiv war (z.B. Cursor noch im Spinner oder Combobox zwar geklickt aber dann doch den selben Wert ausgewählt, womit kein Event kommt um den Editor zu beenden) die in der neuen Tabelle gar nicht da ist (also weniger Zeilen) und dann dort eine andere Zeile gewählt wird, gibts eine Exception. Die Exception kommt von einem Vector des Table-Models (DefaultTableModel!), bei dem über die Grenzen hinaus zugegriffen wird: ein setValueAt() mit der alten Zeile, die es aber nicht mehr gibt.
Die eigentliche Frage: sollte beim löschen der Werte in der Tabelle (bzw. im TableModel) nicht eventuell aktive Editoren deaktiviert werden?
Ich helfe mir jetzt damit, den aktuellen CellEditor vorher abzufragen (getCellEditor()) und dann die cancel-Methode davon aufzurufen. Aber das kann doch kaum die Lösung sein.