Problème d'affichage de l'interface graphique AbstractTableModel
Le problème mentionné se produit en raison de la nature asynchrone de l'accès à la base de données et de la nécessité de récupérer des lignes en arrière-plan pour évitez de bloquer le thread de répartition des événements. SwingWorker facilite ce processus.
Solution :
Implémentez le flux de travail suivant :
- Récupérez les lignes en arrière-plan à l'aide de doInBackground() dans un Instance SwingWorker.
- Publiez les résultats intermédiaires à l'aide publier().
- Ajouter les lignes publiées au modèle de table dans process().
Implémentation raffinée :
- Étendez AbstractTableModel avec un JDBCModel personnalisé.
- Créez une classe JDBCWorker dans JDBCModel, qui délègue les lignes récupération dans la base de données.
- JDBCWorker publie les lignes dans le modèle, ce qui met à jour l'interface graphique sur l'EDT.
- Différer la suppression des lignes du modèle vers la méthode delete() de JDBCModel.
- Utilisez fireTableRowsDeleted() après avoir supprimé avec succès la ligne du base de données.
Recommandations supplémentaires :
- Implémentez un filtrage en direct dans la vue pour améliorer l'expérience utilisateur.
- Personnalisez les préférences de la table taille de la fenêtre d'affichage en remplaçant getPreferredScrollableViewportSize().
- Éviter collisions de noms avec des noms d'API courants, tels que TableModel.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!