Heim >Java >javaLernprogramm >Warum wird meine AbstractTableModel-GUI nicht korrekt aktualisiert, wenn sich Daten ändern?

Warum wird meine AbstractTableModel-GUI nicht korrekt aktualisiert, wenn sich Daten ändern?

DDD
DDDOriginal
2024-11-27 15:41:14244Durchsuche

Why is my AbstractTableModel GUI not updating correctly when data changes?

AbstractTableModel-GUI-Anzeigeproblem

Die AbstractTableModel-Klasse wird zur Darstellung der Daten in einer JTable verwendet. Es bietet Methoden zum Abrufen der Daten für jede Zelle in der Tabelle und zum Hinzufügen oder Entfernen von Zeilen und Spalten zur Tabelle.

Im bereitgestellten Code wird die TableModel-Klasse verwendet, um die Ergebnisse einer Datenbank anzuzeigen Abfrage in einer JTable. Es gibt jedoch zwei Probleme mit der Art und Weise, wie die Tabelle angezeigt wird.

  1. Das erste Problem besteht darin, dass die Tabelle manchmal nicht korrekt angezeigt wird. Dies liegt daran, dass die TableModel-Klasse nicht ordnungsgemäß aktualisiert wird, wenn sich die Daten in der Datenbank ändern. Um dies zu beheben, sollte die TableModel-Klasse jedes Mal aktualisiert werden, wenn sich die Daten in der Datenbank ändern.
  2. Das zweite Problem besteht darin, dass die Tabelle nicht automatisch aktualisiert wird, wenn eine Zeile gelöscht wird. Um dies zu beheben, sollte die TableModel-Klasse jedes Mal aktualisiert werden, wenn eine Zeile gelöscht wird.

Hier ist eine modifizierte Version der TableModel-Klasse, die diese beiden Probleme behebt:

import java.util.List;
import javax.swing.table.AbstractTableModel;

public class TableModel extends AbstractTableModel {

    private List<String[]> data;
    private String[] columnNames;

    public TableModel(List<String[]> data, String[] columnNames) {
        this.data = data;
        this.columnNames = columnNames;
    }

    @Override
    public int getRowCount() {
        return data.size();
    }

    @Override
    public int getColumnCount() {
        return columnNames.length;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        return data.get(rowIndex)[columnIndex];
    }

    @Override
    public String getColumnName(int columnIndex) {
        return columnNames[columnIndex];
    }

    public void addRow(String[] rowData) {
        data.add(rowData);
        fireTableRowsInserted(data.size() - 1, data.size() - 1);
    }

    public void removeRow(int rowIndex) {
        data.remove(rowIndex);
        fireTableRowsDeleted(rowIndex, rowIndex);
    }

    public void updateData(List<String[]> newData) {
        data = newData;
        fireTableDataChanged();
    }
}

Dies Die modifizierte Version der TableModel-Klasse enthält die folgenden Änderungen:

  • Der Konstruktor akzeptiert jetzt zwei Argumente: eine Liste von Zeilen und eine Liste von Spalten Namen.
  • Die Methoden addRow(), removeRow() und updateData() wurden hinzugefügt, um die Aktualisierung des Tabellenmodells zu ermöglichen.
  • Die Methoden fireTableRowsInserted(), fireTableRowsDeleted() und fireTableDataChanged()-Methoden wurden hinzugefügt, um die JTable darüber zu informieren, dass das Tabellenmodell vorhanden ist geändert.

Diese Änderungen beheben die beiden Probleme mit der Art und Weise, wie die Tabelle angezeigt wird.

Das obige ist der detaillierte Inhalt vonWarum wird meine AbstractTableModel-GUI nicht korrekt aktualisiert, wenn sich Daten ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn