Frage

Wenn Sie auf eine Schaltfläche klicken, möchte ich, dass die ausgewählten Zeilen invertiert werden (nicht ausgewählte Zeilen sollten ausgewählt und ausgewählte Zeilen nicht ausgewählt werden).

Gibt es eine Build-In-Methode in jtable, um dies zu tun?

War es hilfreich?

Lösung

JTable scheint nicht eine eingebaute Möglichkeit zu haben. Also habe ich es mit dem folgenden Code implementiert. (Ich hoffe, dies ist hilfreich für jemanden, der einem ähnlichen Problem gegenübersteht.)

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

Andere Tipps

Um die Sudar -Lösung zu vereinfachen:

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

JTable hat diese Funktion nicht

Nein, Sie müssen einen CutSom implementieren LISTSelectionListener

Eine Verfeinerung von oben ist die Aktualisierung der Auswahl mit dem Auswahlmodellobjekt, nicht mit dem Tabellenobjekt. Wenn Sie die Auswahl über die Tabelle aktualisieren, fügt jedes Update ein Auswahlwechselereignis aus und es dauert nur wenige Sekunden, bis eine Tabelle mit nur wenigen hundert Zeilen aktualisiert wird.

Der schnellste Weg für Tabellen mit mehr als wenigen hundert Zeilen ist dies

/**
 * 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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top