# JTable Zellen ändern



## sauer82 (16. Dez 2003)

Ich habe eine JTabel und kann auch die Zellen editieren, aber wenn ich die Zelle wieder verlasse, steht nicht der veränderte wert drin sondern der ausgangs Wert. Kann mir da jemand weiter helfen???


```
public boolean isCellEditable(Object node, int column)
{
       return true;
}
```
Das ist die Methode mit der ich die Zelle Editierbar mache.


----------



## nekton (16. Dez 2003)

irgendwie macht deine methode doch nix anderes als true zurueck zu geben. sollte da nicht vieleicht noch irgendwas rein, was die eingegebenen values sichert?


----------



## sauer82 (16. Dez 2003)

Naja aber wie spreche ich die Zellen denn an?? Gibt es da irgendeine Methode?????


----------



## Ebenius (16. Dez 2003)

Also üblicherweise funktioniert der Spaß ungefähr so:

Du klickst auf eine Tabelle. Die Tabelle fragt ihr Model _isCellEditable(row, column)_. Das ist Deine Methode.

Sagt das Model _true_ wird der _CellEditor_ ermittelt und gefragt, ob er die Zelle mit dem entsprechenden Event editieren will (so wird zum Beispiel bei manchen Editoren erst auf den Doppelklick editiert).

Will der _CellEditor_ editieren, so wird seine Komponente in der Tabelle dargestellt. Dann kann man editieren.

Klickst Du jetzt neben die Zelle wird _stopCellEditing()_ im _CellEditor_ aufgerufen. Dann feuert der Editor ein Event und die Tabelle regiert darauf indem sie den geänderten Wert vom _CellEditor_ holt und die Methode  _setValueAt(value, row, column)_ im _TableModel_ aufruft, die dann den Wert setzt und einen Event feuert, worauf die Tabelle die Zelle neu zeichnet.


Dass Deine Tabelle die geänderten Werte nicht darstellt kann daher an folgenden Dingen liegen:
1) Dein _TableModel_ speichert die Werte nicht,
2) Dein _TableModel_ speichert die Werte aber feuert keinen Event (oder den falschen),
3) Der _CellEditor_ feuert keinen Event bei _stopCellEditing()_,
4) Der _CellEditor_ feuert zwar den Event, gibt aber nicht den geänderten Wert zurück und
5) Du klickst nicht neben die Zelle sondern die Tabelle. Dann wird üblicherweise _cancelCellEditing()_ aufgerufen und der Original-Wert belassen. Das Verhalten lässt sich ändern...

Falls das nicht hilft, poste nochmal (vielleicht auch ein bisschen Code, *nur das wichtigste*).

Dein Problem ist lösbar 

Es grüßt Ebenius


----------

