AbstractTableModel GUI-Anzeigeproblem
Das erwähnte Problem tritt aufgrund der asynchronen Natur des Datenbankzugriffs und der Notwendigkeit auf, Zeilen im Hintergrund abzurufen Vermeiden Sie das Blockieren des Event-Dispatch-Threads. SwingWorker erleichtert diesen Prozess.
Lösung:
Implementieren Sie den folgenden Workflow:
- Rufen Sie Zeilen im Hintergrund mit doInBackground() in a ab SwingWorker-Instanz.
- Zwischenergebnisse mit Publish() veröffentlichen.
- Die veröffentlichten Zeilen zum Tabellenmodell in Process() hinzufügen.
Verfeinerte Implementierung :
- Erweitern Sie AbstractTableModel mit einem benutzerdefinierten JDBCModel.
- Erstellen Sie eine JDBCWorker-Klasse innerhalb von JDBCModel, die den Zeilenabruf an die Datenbank delegiert.
- JDBCWorker veröffentlicht Zeilen zum Modell, das die GUI auf dem EDT aktualisiert.
- Verschieben Sie das Löschen von Zeilen aus dem Modell auf die delete()-Methode von JDBCModel.
- Verwenden Sie fireTableRowsDeleted(), nachdem Sie die Zeile erfolgreich aus der Datenbank entfernt haben.
Zusätzliche Empfehlungen:
- Implementieren Sie Live-Filterung in der Ansicht, um die Benutzererfahrung zu verbessern.
- Passen Sie die bevorzugte Ansichtsfenstergröße der Tabelle an durch Überschreiben von getPreferredScrollableViewportSize().
- Vermeiden Sie Namenskollisionen mit gängigen API-Namen wie TableModel.
Das obige ist der detaillierte Inhalt vonWie können Datenbankdaten mithilfe von AbstractTableModel und SwingWorker effizient in einer Swing-Tabelle angezeigt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!