Heim  >  Artikel  >  Java  >  Wie kann die GUI-Leistung verbessert und die Tabelle nach dem Löschen von Zeilen in Java automatisch aktualisiert werden?

Wie kann die GUI-Leistung verbessert und die Tabelle nach dem Löschen von Zeilen in Java automatisch aktualisiert werden?

Susan Sarandon
Susan SarandonOriginal
2024-11-19 12:37:02643Durchsuche

How to Improve GUI Performance and Auto-Update Table After Row Deletion in Java?

AbstractTableModel GUI-Anzeigeproblem

Das Problem mit der GUI in diesem Beispiel scheint mit dem asynchronen Zugriff auf die Datenbank zusammenzuhängen, was zu Inkonsistenzen führen kann in der Tabellendarstellung. Um dieses Problem zu beheben, sollte das ResultSet im Hintergrund abgerufen werden, um eine Blockierung des Event-Dispatch-Threads zu vermeiden. Die Daten können in Blöcken veröffentlicht und inkrementell zum Tabellenmodell hinzugefügt werden, um eine flüssigere Anzeige zu ermöglichen.

Hier ist eine modifizierte Version des Codes, der einen SwingWorker verwendet, um die Ergebnisse im Hintergrund abzurufen und zu verarbeiten:

public class Gui2 extends JFrame {
    // ...

    public Gui2(Connection conn) {
        // ...

        SwingWorker<List<Row>, Integer> worker = new SwingWorker<List<Row>, Integer>() {
            @Override
            protected List<Row> doInBackground() throws Exception {
                try {
                    while (rs.next()) {
                        Row row = new Row();
                        row.ID = rs.getInt(1);
                        row.name = rs.getString(2);
                        publish(row);
                    }
                } catch (SQLException e) {
                    e.printStackTrace(System.err);
                }
                return null;
            }

            @Override
            protected void process(List<Row> chunks) {
                int n = getRowCount();
                for (Row row : chunks) {
                    tableData.add(row);
                }
                fireTableRowsInserted(n, n + chunks.size());
            }
        };
        worker.execute();
        
        // ...
    }
}

Der Worker ruft die Zeilen im Hintergrund ab und veröffentlicht sie in Blöcken. Die Methode „process()“ fügt die Zeilen zum TableModel hinzu und aktualisiert die Tabellenanzeige schrittweise.

Automatische Tabellenaktualisierung nach Zeilenlöschung

Um die Tabelle nach a automatisch zu aktualisieren Wenn eine Zeile gelöscht wird, sollte der Löschvorgang im TableModel und nicht in der GUI ausgeführt werden. Das TableModel sollte über eine delete()-Methode verfügen, die die Zeile aus den zugrunde liegenden Daten entfernt und ein Ereignis „Tabellenzeilen gelöscht“ auslöst, um die Tabellenkomponente über die Änderung zu informieren. Hier ist eine modifizierte Version der delete()-Methode:

public class TableModel extends AbstractTableModel {
    // ...

    public void delete(int rowIndex) {
        // ...
        try {
            PreparedStatement pre = conn.prepareStatement(query);

            pre.executeUpdate();

            // Remove the row from the data
            tableData.remove(rowIndex);

            // Fire table rows deleted event
            fireTableRowsDeleted(rowIndex, rowIndex);

            JOptionPane.showMessageDialog(null, "Row Deleted Successfully");
        } catch (Exception e1) {
            JOptionPane.showMessageDialog(null, e1.getMessage());
        }
    }
}

Mit diesen Änderungen wird die Tabelle automatisch aktualisiert, nachdem eine Zeile gelöscht wurde, was eine benutzerfreundlichere und reaktionsfähigere Schnittstelle bietet.

Das obige ist der detaillierte Inhalt vonWie kann die GUI-Leistung verbessert und die Tabelle nach dem Löschen von Zeilen in Java automatisch aktualisiert werden?. 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