Question

En cliquant sur un bouton, je veux que les lignes sélectionnées pour être inversées (lignes non sélectionnées doivent être sélectionnées et les lignes sélectionnées doivent être non sélectionné).

Y at-il une méthode de construction en JTable à le faire?

Était-ce utile?

La solution

JTable ne semble pas avoir un moyen intégré de le faire. Donc, je mis en œuvre avec le code suivant. (Espérons que cela est utile pour quelqu'un qui fait face à un problème similaire.)

int[] selectedIndexs = jtable.getSelectedRows();
jtable.selectAll();

for (int i = 0; i < jtable.getRowCount(); i++) {
    for (int selectedIndex : selectedIndexs) {
        if (selectedIndex == i) {
            jtable.removeRowSelectionInterval(i, i);
            break;
        }
    }
}

Autres conseils

Pour simplifier la solution de Sudar:

int[] selectedIndices = table.getSelectedRows();
table.selectAll();
for (int prevSel : selectedIndices) {
    table.removeRowSelectionInterval(prevSel, prevSel);
}

JTable ne pas cette fonctionnalité

Non, vous devrez mettre en œuvre un cutsom ListSelectionListener

Un perfectionnement ci-dessus est de mettre à jour la sélection en utilisant l'objet de modèle de sélection, pas l'objet de la table. Lorsque vous mettez à jour la sélection via la table, chaque mise à jour déclenche un événement de changement de sélection et il faut quelques secondes pour mettre à jour une table avec seulement quelques centaines de lignes.

Le moyen le plus rapide pour les tables avec plus de quelques centaines de lignes est ce

/**
 * Invert selection in a JTable.
 *
 * @param table
 */
public static void invertSelection(JTable table) {
    ListSelectionModel mdl = table.getSelectionModel();
    int[] selected = table.getSelectedRows();
    mdl.setValueIsAdjusting(true);
    mdl.setSelectionInterval(0, table.getRowCount() - 1);
    for (int i : selected) {
        mdl.removeSelectionInterval(i, i);
    }
    mdl.setValueIsAdjusting(false);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top