Anzeige

Einzelne ausgewählte Zeile im AbstractTableModel löschen


#1
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
 

HonniCilest

Erfahrenes Mitglied
#2
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
 
#3
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.
 

HonniCilest

Erfahrenes Mitglied
#4
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)
 

HonniCilest

Erfahrenes Mitglied
#6
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.
 
#7
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?
 

HonniCilest

Erfahrenes Mitglied
#8
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);
 
Anzeige

Neue Beiträge

Anzeige