Maison > Java > javaDidacticiel > Comment puis-je obtenir efficacement les lignes sélectionnées d'une JTable à l'aide de AbstractTableModel ?

Comment puis-je obtenir efficacement les lignes sélectionnées d'une JTable à l'aide de AbstractTableModel ?

DDD
Libérer: 2024-11-20 00:46:02
original
718 Les gens l'ont consulté

How Can I Efficiently Get Selected Rows from a JTable Using AbstractTableModel?

Obtenir efficacement les lignes sélectionnées dans JTable avec AbstractTableModel

Lors de l'utilisation d'une JTable avec AbstractTableModel, la récupération des lignes sélectionnées peut être une tâche importante. Cependant, l'approche conventionnelle consistant à parcourir toutes les lignes et à vérifier les cellules sélectionnées peut devenir inefficace lorsqu'il s'agit de grands ensembles de données.

Pour relever ce défi, une meilleure approche consiste à mettre à jour un ensemble de lignes sélectionnées chaque fois qu'une valeur de cellule changements. Dans l'exemple ci-dessous, nous implémentons un TableModel qui maintient un Set coché et une JList qui affiche les numéros de ligne sélectionnés :

import java.util.Set;
import java.util.TreeSet;
import javax.swing.JTable;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;

public class CheckModel extends AbstractTableModel {

    private int rows;
    private List<Boolean> rowList;
    private Set<Integer> checked = new TreeSet<>();

    public CheckModel(int rows) {
        this.rows = rows;
        rowList = new ArrayList<>(rows);
        for (int i = 0; i < rows; i++) {
            rowList.add(Boolean.FALSE);
        }
    }

    @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);
    }

    public Set<Integer> getCheckedRows() {
        return checked;
    }
}
Copier après la connexion

Dans ce modèle, la méthode setValueAt met à jour à la fois la rowList et l'ensemble coché. Lorsqu'une cellule sélectionnée change, un TableModelListener est averti et la JList est mise à jour pour afficher les lignes actuellement sélectionnées.

Cette approche améliore considérablement les performances, en particulier pour les grands ensembles de données, car elle élimine le besoin de parcourir toutes les lignes pour déterminer lesquels sont sélectionnés. Il permet également une écoute efficace des changements de sélection et une récupération facile des lignes sélectionné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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal