Obtention efficace des lignes sélectionnées à partir d'une JTable à l'aide de AbstractTableModel
Le processus de récupération des lignes sélectionnées à partir d'une JTable peut devenir inefficace lorsqu'il s'agit de grands ensembles de données , car cela implique de parcourir séquentiellement toutes les lignes. Cet article présente une approche plus efficace utilisant un mécanisme d'écoute basé sur AbstractTableModel.
Énoncé du problème
Dans une JTable avec un JCheckBox dans la première colonne pour la sélection de lignes, récupération Les lignes sélectionnées nécessitent de parcourir toutes les lignes pour rassembler celles qui sont cochées. À mesure que l'ensemble de données grandit, cela devient une approche indésirable.
Solution suggérée : implémenter un écouteur TableModel
La solution consiste à ajouter un TableModelListener à la colonne JCheckBox. Chaque fois que l'état d'un JCheckBox change (SELECTED/DESELECTED) dans la classe d'écoute, le tableau selectedRows est mis à jour. De plus, table.getSelectedRow(..) peut être invoqué dans la classe d'écoute pour capturer l'index de la ligne sélectionnée.
Existe-t-il une meilleure façon ?
L'exemple fourni présente une approche alternative, dans laquelle le TableModel met à jour un Set
Détails d'implémentation
La classe CheckModel étend AbstractTableModel et gère la rowList et les vérifications définis, en les conservant en fonction des changements d’état des cases à cocher. La classe DisplayPanel contient une JList qui écoute les modifications du modèle de table et met à jour son affichage en conséquence.
Conclusion
Bien que l'approche de parcours séquentiel de lignes puisse suffire pour les petits ensembles de données, l'utilisation d'un écouteur TableModel ou de la méthode alternative présentée ci-dessus permet des gains d'efficacité significatifs lors du traitement de grands ensembles de données. Ces techniques permettent une récupération efficace des lignes sélectionnées, quelle que soit la taille de la table.
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!