2010-12-29 13 views
1

Ich habe Beiträge gelesen, die meinen ähneln, und durch die Java tutorial page lesen, aber ich kann einfach nicht scheinen, dass das funktioniert. Ich bin mir nicht sicher, ob ich etwas Grundlegendes vermisse oder nicht ...HowTo Eine Zeile in einer JTable mit einem benutzerdefinierten TableModel entfernen

Ich habe ein benutzerdefiniertes Tabellenmodell unten, dass ich in der Lage sein muss, Zeilen zu löschen. Die Tabelle wird leer initialisiert und Zeilen werden über ein Kombinationsfeld und eine Schaltfläche zum Hinzufügen hinzugefügt. Es gibt auch eine Schaltfläche zum Löschen, die die ausgewählte Zeile aus der Tabelle löschen muss.

class TableModel extends AbstractTableModel 
{ 
    private String[] columnNames = {"Enabled", "Value" }; 
    protected Class[] columnClasses = new Class[] { Boolean.class, String.class }; 

    public int getColumnCount()    { return columnNames.length; } 
    public int getRowCount()    { return filters.size(); } 
    public String getColumnName(int col) { return columnNames[col]; } 
    public Class getColumnClass(int col) { return columnClasses[col]; } 

    public Object getValueAt(int row, int col) { ... } 

    public void setValueAt(Object value, int row, int col) { ... } 

    public void addRow(String value) 
    { 
     fireTableRowsInserted(filters.size() - 1, filters.size() - 1); 
     int row = filters.size() -1 ; 
     int col = 1; 
     setValueAt(value, row, col);    
    } 

    public void removeRow(int row) 
    {   
     fireTableRowsDeleted(selectedRow, selectedRow); 
    } 
} 

Ich habe bestätigt, dass selectedRow die richtige Zeile durch Abzüge in der Konsole enthält. Die fireTableRowsDeleted Funktion macht einfach nichts. Die Zeile existiert noch. Wie löschst du gerade eine bestimmte Zeile?

Danke,

+3

Woher kommt das Filterobjekt? @ njozwiak – gumuruh

Antwort

3

Unmittelbar nachdem ich das gepostet habe, habe ich es herausgefunden.

Die Zeilen Inhalte werden auf einer Liste der Filter basiert:

public int getRowCount() { return filters.size(); } 

Mein Problem war, ich, ohne zu entfernen aus der Liste um eine Zeile zu löschen versuchte, dass. So modifizierte ich removeRow(), die folgenden sein:

public void removeRow(int row) 
{ 
    filters.remove(row); 
    fireTableRowsDeleted(row, row); 
} 

Und es wirkt wie ein Zauber.

prost

5

Der Aufruf von fireTableRowsDeleted einfach das Ereignis feuert Reihen, um anzuzeigen, gelöscht wurden, müssen Sie noch sie tatsächlich aus dem Modell entfernen.

+0

Was meinst du damit, es aus dem Modell zu entfernen? Entfernt das die Daten wie sein -2D-Array? : D – gumuruh

+0

Ja, die remove-Methode muss die Daten tatsächlich aus der Datenstruktur entfernen, die zum internen Speichern der Daten verwendet wird. – vickirk

0

Ich denke, das ist die Antwort: werden gelöscht

final int row = selectedRow; 
EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      model.removeRow(row); 
     } 
}); 

Die Zeile, wenn die Bearbeitung beendet ist.

Verwandte Themen