2012-03-28 4 views
0

In einer Klasse namens HistoryPanel Ich habe eine statische JTable namens resultsTable mit einem statischen DefaultTableModel namens tableModel. Die Tabelle hat eine eigene Zelle Editor:JTable entfernen Zeile durch Klicken auf eine Zelle mit einem benutzerdefinierten DeleteCellEditor aus der gleichen JTable

resultsTable.getColumn("Delete").setCellEditor(new DeleteButtonEditor(new JCheckBox())); 

Innen, natürlich, ich diese beiden Methoden wie diese außer Kraft setzen:

public Object getCellEditorValue() 
{ 
    if (isPushed) 
    { 
     HistoryPanel.tableModel.removeRow(HistoryPanel.resultsTable.getSelectedRow()); 
    } 
} 

protected void fireEditingStopped() 
{ 
    super.fireEditingStopped(); 
} 

Die Ausnahme wird nur ausgelöst, wenn ich versuche, die letzte Zeile des entfernen ErgebnisseTabelle. Wenn ich eine Zeile entferne, die nicht die letzte ist, funktioniert sie perfekt. Die Ausnahme ist:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 >= 1 

Und die Zeile Code, der die Ausnahme verursacht, ist:

super.fireEditingStopped(); 

Kann mir jemand helfen? Wie kann ich diese Ausnahme vermeiden?

Antwort

1

Derzeit entfernen Sie die Zeile, die Sie während des Bearbeitungsvorgangs bearbeiten. Es wäre viel einfacher, wenn Sie eine SSCCE gepostet hätten, damit ich meine vorgeschlagene Lösung testen könnte, aber jetzt überlasse ich es Ihnen.

Ich gehe davon aus, dass Ihr

if (isPushed) 
{ 
    HistoryPanel.tableModel.removeRow(HistoryPanel.resultsTable.getSelectedRow()); 
} 

innerhalb eines EventQueue.invokeLater Anruf Einwickeln könnte das Problem lösen. So ist die Bearbeitung beendet, wenn Sie die Zeile entfernen.

+0

Vielen Dank! Klappt wunderbar! –

+0

@HristoValchevHristov dann betrachten [die Antwort akzeptieren] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work), so dass andere diese Frage sehen können, ist gelöst – Robin

1

wirklich, warum nicht Boolean Wert verwenden, um direkt, warum gibt es Editor for JCheckBox, haben Sie Tutorial how the JTable works

EDIT

für echte TableCellEditor Sie rufen

int row = table.convertRowIndexToModel(table.getEditingRow()); 
fireEditingStopped(); 

und thenafter möglich überprüfen Call for Delete