Heim  >  Artikel  >  Java  >  Warum wird meine JTable nach dem Löschen einer Zeile aus der Datenbank nicht aktualisiert?

Warum wird meine JTable nach dem Löschen einer Zeile aus der Datenbank nicht aktualisiert?

Barbara Streisand
Barbara StreisandOriginal
2024-11-16 11:48:03573Durchsuche

Why Doesn't My JTable Update After Deleting a Row from the Database?

AbstractTableModel-GUI-Anzeigeproblem

Das Problem, mit dem Sie konfrontiert sind, hängt damit zusammen, wie Sie das Tabellenmodell aktualisieren, wenn eine Zeile gelöscht wird. Derzeit aktualisiert Ihr Listener für die Schaltflächenaktion „deleteSelectedRow“ die Daten in der Datenbank, löst jedoch keine Aktualisierung des Tabellenmodells aus. Aus diesem Grund wird in der Tabelle weiterhin die gelöschte Zeile angezeigt.

Wie kann das Problem behoben werden?

Um dieses Problem zu beheben, müssen Sie das Tabellenmodell explizit darüber informieren, dass sich die Daten geändert haben. Sie können dies tun, indem Sie die Methode fireTableRowsDeleted() der TableModel-Schnittstelle immer dann aufrufen, wenn eine Zeile aus der Datenbank gelöscht wird. Dadurch wird das Tabellenmodell veranlasst, seine internen Datenstrukturen zu aktualisieren und die Tabelle zu aktualisieren.

Hier ist eine aktualisierte Version Ihres Codes, die die notwendigen Änderungen enthält:

delete.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {

        int rowIndex = table.getSelectedRow();

        Object columnIndexValue = table.getModel().getValueAt(rowIndex, 0);

        String columnName = table.getModel().getColumnName(0);

        String query = "delete from world.city" + " where " + columnName + "=" + columnIndexValue;

        try {

            PreparedStatement pre = conn.prepareStatement(query);

            pre.executeUpdate();

            JOptionPane.showMessageDialog(null, "Row Deleted Successfully");
            
            // Notify the table model that the data has changed
            ((TableModel) table.getModel()).fireTableRowsDeleted(rowIndex, rowIndex);

        } catch (Exception e1) {
            JOptionPane.showMessageDialog(null, e1.getMessage());
        }

    }

});

Durch Aufruf von fireTableRowsDeleted() , weisen Sie das Tabellenmodell an, die angegebene Zeile aus seinen internen Datenstrukturen zu entfernen und die Tabelle entsprechend zu aktualisieren. Dadurch wird sichergestellt, dass die GUI die an der zugrunde liegenden Datenbank vorgenommenen Änderungen widerspiegelt.

Das obige ist der detaillierte Inhalt vonWarum wird meine JTable nach dem Löschen einer Zeile aus der Datenbank nicht aktualisiert?. 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