Einzelne ausgewählte Zeile im AbstractTableModel löschen

Nico2201

Mitglied
Hallo,

ich möchte eine einzelne ausgewählte Zeile in meinem AbstractTableModel löschen. Einen Lösungsansatz habe ich schon, aber das funktioniert nicht so wie ich es möchte. Wie das ganze am Ende funktionieren soll, ist mir klar, aber da ich keine Liste oder keinen Vektor benutzen möchte, sondern ein Objekt Array, ist das ganze nicht gerade einfach für mich. So müsste meines Wissens nach eine Zeile gelöscht werden: model.removeRow(model.getRowCount() - 1); und die dazugehörige Methode im AbstractTableModel:
Java:
public void removeRow(int row) {
        
        fireTableRowsDeleted(row, row);
    }
Und ich denke mal, dass der "Fehler" genau an dieser Methode liegt. Leider finde ich da derzeit keine Lösung. Habt ihr da ggf. etwas für mich?

Vielen Dank für eure Bemühungen!

Freundliche Grüße
 
Ein 2D-Array ist ein Array von einem Array.

Ein Array hat aber eine fixe Größe, d.h. du kannst du Array nicht wie bei einer Liste einfach entfernen. Du musst also die Werte eines Arrays löschen.

Java:
Object[][] tableData; // Der Inhalt der Tabelle
Object[] rowData = tableData[rowNumber]; // Eine Zeile der Tabelle
 
Ein 2D-Array ist ein Array von einem Array.

Ein Array hat aber eine fixe Größe, d.h. du kannst du Array nicht wie bei einer Liste einfach entfernen. Du musst also die Werte eines Arrays löschen.

Java:
Object[][] tableData; // Der Inhalt der Tabelle
Object[] rowData = tableData[rowNumber]; // Eine Zeile der Tabelle
Und wie implementiere ich das in meine Methode removeRow? Da blicke ich nicht ganz durch, tut mir leid.
 
Du brauchst eine Schleife über dein Row-Array was die Werte null setzt.

Aber du brauchst noch mehr, wenn du die Zeilen "nachrutschen" lassen willst. Sonst hat du eine Leerzeile (außer du entfernst immer die letzte)
 
Na es müsste etwa so aussehen:

Java:
Object[] rowData = tableData[row];
for(int i = 0; i < rowData.length; i++) {
    rowData[i] = null;
}
fireTableRowsDeleted(row, row);

Aber wie gesagt, hier rutschen die Zeilen nicht nach. Du hast dann eine Leerzeile. Für das Nachrutschen ist ein Array nicht geeignet.
 
Na es müsste etwa so aussehen:

Java:
Object[] rowData = tableData[row];
for(int i = 0; i < rowData.length; i++) {
    rowData[i] = null;
}
fireTableRowsDeleted(row, row);

Aber wie gesagt, hier rutschen die Zeilen nicht nach. Du hast dann eine Leerzeile. Für das Nachrutschen ist ein Array nicht geeignet.

Danke! Hat alles geklappt und das mit dem Nachrutschen ist nicht so dramatisch. Jetzt würde ich gerne noch die Methode "AllesLoeschen" implementieren - also, dass alle Eingaben in der Tabelle gelöscht werden. Wie würde das funktionieren?
 
Ich denke das sollte etwa so funktionieren:

Java:
int rowCount = tableData.length;
for(int row = 0; i < rowCount; i++) {
    Object[] rowData = tableData[row];
    for(int column = 0; column < rowData.length; column++) {
        rowData[column] = null;
    }
}
fireTableRowsDeleted(0, rowCount);
 
Zurück