Okazuje się że w Javie usunięcie wybranych rzędów w tabeli jest nie lada wyzwaniem inżynieryjnym :/
Normalny kod typu:
// model - DefaultTableModel
// table - JTable
while(table.getSelectedRows().length > 0) {
int mr = table.convertRowIndexToModel(table.getSelectedRow());
model.removeRow(mr);
}
nie działa bo java gubi w niektórych sytuacjach jeden wiersz. (czasem przy jednym removeRow znikają dwa wiersze z selectedRows)
PS. Używam sortera więc konwersja poprzez convertRowIndexToModel jest obowiązkowa.
Jako że nie ma nigdzie oczywistych metod model.removeRows(table.convertRowIndexesToModel(able.getSelectedRows())), więc z mojej wiedzy wynika że muszę to zrobić tak:
int tabSel[] = table.getSelectedRows();
ArrayList<Integer> modSel = new ArrayList<Integer>();
for(int t : tabSel) {
modSel.add(table.convertRowIndexToModel(t));
}
Collections.sort(modSel);
int removed = 0;
for(int m : modSel) {
model.removeRow(m - removed);
removed++;
}
table.clearSelection();
Pytanie czy da się to zrobić jakoś normalniej, wbudowanymi funkcjami ?