При нажатии кнопки я хочу, чтобы выбранные строки были инвертированы (не выбранные строки должны быть выбраны, а выбранные строки должны быть не выбраны).Инвертировать выделение в JTable
Есть ли встроенный метод в JTable для этого?
При нажатии кнопки я хочу, чтобы выбранные строки были инвертированы (не выбранные строки должны быть выбраны, а выбранные строки должны быть не выбраны).Инвертировать выделение в JTable
Есть ли встроенный метод в JTable для этого?
JTable не кажется, имеет встроенный способ сделать это. Поэтому я реализовал его со следующим кодом. (Надеюсь, что это полезно для тех, кто сталкивается с аналогичной проблемой.)
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;
}
}
}
JTable не имеет такой функции
Нет, Вы должны реализовать cutsom ListSelectionListener
Чтобы упростить решение Сударь в:
int[] selectedIndices = table.getSelectedRows();
table.selectAll();
for (int prevSel : selectedIndices) {
table.removeRowSelectionInterval(prevSel, prevSel);
}
Обратите внимание, что в случае больших таблиц, valueIsAdjusting свойство ListSelectionModel помогает немного с производительностью. – Touko
Уточнение выше, чтобы обновить выбор с помощью объектной модели выбора, не табличный объект. Когда вы обновляете выбор по таблице, каждое обновление запускает событие изменения выбора, и для обновления таблицы всего несколько сотен строк требуется несколько секунд.
Самый быстрый способ для таблиц с более чем несколько сотен строк это
/**
* 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);
}
Добавить свое решение в ответ на голосование вверх: D –