Pregunta

Al hacer clic en un botón, quiero las filas seleccionadas para ser invertidas (filas no seleccionadas deben seleccionarse y filas seleccionadas deben ser no seleccionado).

¿Hay una acumulación en el método en el JTable para hacerlo?

¿Fue útil?

Solución

JTable no parece tener una forma integrada de de hacer esto. Así que he implementado con el siguiente código. (Hope que esto sea útil para alguien que se enfrenta a un problema similar.)

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

Otros consejos

Para simplificar la solución de Sudar:

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

JTable no tiene esa característica

No, usted tendrá que poner en práctica un cutsom ListSelectionListener

Un refinamiento anteriormente es a la selección actualización utilizando el objeto de modelo de selección, no el objeto de tabla. Al actualizar la selección a través de la mesa, cada actualización dispara un evento de cambio de la selección y se tarda unos segundos para actualizar una tabla con sólo unos pocos cientos de filas.

La forma más rápida para tablas con más de unos pocos cientos de filas es la siguiente

/**
 * 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);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top