Maison  >  Article  >  Java  >  Comment obtenir efficacement les lignes sélectionnées d'une JTable avec la sélection de lignes JCheckBox ?

Comment obtenir efficacement les lignes sélectionnées d'une JTable avec la sélection de lignes JCheckBox ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-22 13:03:17583parcourir

How to Efficiently Get Selected Rows from a JTable with JCheckBox Row Selection?

Obtention des lignes sélectionnées dans JTable avec le suivi des lignes sélectionnées

Problème :
Obtention efficace des lignes sélectionnées à partir d'un JTable avec un JCheckBox dans la première colonne pour la sélection de lignes. Le parcours séquentiel devient inefficace avec un grand nombre de lignes.

Approche traditionnelle :
Itération séquentielle sur toutes les lignes pour obtenir les lignes sélectionnées. Cette approche est problématique lorsqu'il s'agit de milliers de lignes.

Approche proposée :
Suivi basé sur un modèle :

  • Mise à jour un ensemble contenant les index de ligne sélectionnés chaque fois que la valeur de JCheckBox change.
  • Une classe d'écoute sur le modèle de table met à jour la valeur Set en fonction de la sélection de lignes.

Exemple de code :

import javax.swing.table.AbstractTableModel;
import java.util.Set;
import java.util.TreeSet;

public class CheckModel extends AbstractTableModel {

    // ...

    private Set<Integer> checked = new TreeSet<>();

    // ...

    @Override
    public void setValueAt(Object aValue, int row, int col) {
        boolean b = (Boolean) aValue;
        rowList.set(row, b);
        if (b) {
            checked.add(row);
        } else {
            checked.remove(row);
        }
        fireTableRowsUpdated(row, row);
    }
}

Optimisation supplémentaire :

  • Utilisez une structure de données légère, telle qu'un TreeSet, pour stocker les index de lignes sélectionnés de manière efficace. itération.
  • Envisagez d'utiliser une structure de données différente pour stocker les lignes sélectionnées si la consommation de mémoire devient un problème.

Avantages de l'approche basée sur un modèle :

  • Accès en temps constant aux lignes sélectionnées, quel que soit le nombre total de lignes.
  • Pas besoin de parcours séquentiel, ce qui rend la récupération de sélection très efficace.

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