# JTable markierte Zelle wird bei removeRow nicht mit gelöscht



## Christoph74 (29. Jan 2010)

Hallo,

habe eine JTable, aus welcher ich mittels:

```
DefaultTableModel dtm = (DefaultTableModel) jTBL.getModel();
        dtm.removeRow(zeile);
```
eine Zeile lösche.

Die entsprechende Zeile wird dann auch gelöscht, nur wird die zuvor selektierte Zelle nicht gelöscht, sondern einfach in die darunter liegende Zeile eingetragen.
Wenn vor dem Löschen keine Zelle explizit markiert wurde, so funzt das Löschen ohne Probleme.
Habs auch schon mit 

```
jTBL.getSelectionModel().clearSelection();
```

Vor dem löschen versucht...

Hilfe...danke
christoph


----------



## André Uhres (29. Jan 2010)

Christoph74 hat gesagt.:


> Hab's auch schon mit
> 
> ```
> jTBL.getSelectionModel().clearSelection();
> ...



Dann versuch's mal mit:

```
TableCellEditor cellEditor = jTBL.getCellEditor();
if(cellEditor != null){
    cellEditor.stopCellEditing();
}
```
vor dem Löschen.

EDIT: besser (siehe auch folgenden Beitrag):

```
TableCellEditor cellEditor = jTBL.getCellEditor();
boolean stopped = true;
if (cellEditor != null) {
    stopped = cellEditor.stopCellEditing();
}
if (stopped) {
    DefaultTableModel dtm = (DefaultTableModel) jTBL.getModel();
    dtm.removeRow(zeile);
}
```
Die zusätzliche Logik ist allerdings nicht nötig, wenn alle Editoren das Stoppen immer zulassen. Aber wenn die Editoren später verändert/ersetzt werden könnten, ist es vorsichtiger, diese Logik trotzdem einzubauen  .


----------



## Ebenius (30. Jan 2010)

Nur ein Hinweis am Rande: [c]stopCellEditing[/c] muss das Editieren nicht beenden. Wenn die Methode [c]false[/c] zurück liefert, dann ist der Editor weiter offen. In dem Fall muss man entweder nachvolgende Aktionen die auf das Beenden des Editierens bauen abbrechen, oder aber [c]cancelCellEditing()[/c] aufrufen (daran muss sich der Editor halten). André insofern ist Dein Code-Beispiel oben suboptimal.

Ebenius


----------



## Christoph74 (1. Feb 2010)

boaa....danke...funktioniert...
darauf wär ich jetzt mal nicht gekommen...ich glaub ich bin doch zu doof für die Sprache...;-)

Danke


----------



## Ebenius (1. Feb 2010)

Üblicher Weise sieht der Code so aus: 
	
	
	
	





```
final TableCellEditor editor = table.getCellEditor();
if (editor == null || editor.stopCellEditing()) {
  // rumble
}
```
Ebenius


----------



## André Uhres (1. Feb 2010)

Ebenius hat gesagt.:


> Üblicher Weise sieht der Code so aus:
> 
> 
> 
> ...


Ist natürlich eleganter. Nichts für ungut, aber ich finde es immer wieder lustig, wie du Code optimierst und unten steht dann Regel Nummer eins: "Don't do it" :lol:


----------



## Ebenius (2. Feb 2010)

Recht hast Du. ;-) Zu meiner Entschuldigung: Ich hab Deinen Code angesehen und musste zweimal hinsehen. Dann dachte ich: "Achso, das, ja, klar". Und dann dachte ich, ich kippe mal schnell den Code so rein, wie ich ihn immer verwende. Alte Menschen und ihre Gewohnheiten, mehr steckt nicht dahinter. 

Ebenius


----------

