Maison >Java >javaDidacticiel >Pourquoi mon affichage GUI est-il incohérent et comment puis-je mettre à jour la table après la suppression ?

Pourquoi mon affichage GUI est-il incohérent et comment puis-je mettre à jour la table après la suppression ?

DDD
DDDoriginal
2024-11-12 10:33:01426parcourir

Why is My GUI Display Inconsistent and How Can I Update the Table After Deletion?

Problème d'affichage de l'interface graphique AbstractTableModel

Dans le code Java fourni pour créer une interface graphique à l'aide de AbstractTableModel, il existe quelques problèmes liés à l'affichage et fonctionnalité de la deuxième fenêtre GUI (classe Gui2).

Premier problème : apparence incohérente de l'interface graphique

Vous avez mentionné que la fenêtre Gui2 apparaît de deux manières différentes, l'une avec un panneau vide et l'autre avec le tableau et les boutons. Ce comportement incohérent est généralement dû à une initialisation ou un affichage incorrect des composants de l'interface graphique.

Dans le constructeur de la classe Gui2, le panneau est créé et la disposition et les contraintes sont définies, mais les composants (champ de texte, boutons et tableau) ne sont pas ajoutés au panneau. Pour résoudre ce problème, vous devez ajouter les composants au panneau à l'aide de la méthode add() ou en appelant des méthodes spécifiques pour chaque type de composant.

Deuxième problème : mise à jour de la table après suppression

L'ActionListener du bouton « Supprimer la ligne sélectionnée » déclenche la requête de suppression et affiche un message de réussite, mais le tableau ne se met pas automatiquement à jour pour refléter la suppression. Ce problème est lié à la façon dont le modèle de table est mis à jour.

Lorsque vous supprimez une ligne de la base de données, vous devez mettre à jour le modèle de table sous-jacent pour supprimer la ligne supprimée de la structure de données. AbstractTableModel fournit une méthode appelée fireTableRowsDeleted() spécifiquement à cet effet.

Pour résoudre le problème, vous devez ajouter une ligne après la suppression réussie dans l'ActionListener du bouton de suppression pour appeler fireTableRowsDeleted(). Cela informera la JTable que les données ont changé et mettra à jour l'affichage en conséquence.

Considérations supplémentaires :

  • La classe SwingWorker est utilisée pour récupérer lignes du ResultSet en arrière-plan, optimisant l'affichage des grands ensembles de données.
  • La classe JDBCWorker, imbriquée dans JDBCModel, traite les lignes du SwingWorker et met à jour le modèle de table à l'aide des méthodes publi() et process() .
  • Les métadonnées des lignes sont extraites à l'aide de ResultSetMetaData pour déterminer le nombre de colonnes et les noms de colonnes.
  • La méthode getPreferredScrollableViewportSize() est remplacée pour personnaliser la taille du JScrollPane englobant.
  • La propriété progress du SwingWorker est utilisée pour afficher la progression lors de la récupération des données.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn