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!
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