void () { int[] selectedRows = myTableView.getComponent().getSelectedRows(); if(selectedRows.length == 0) return; myTableView.stopEditing(); setModified(); int selectedIndex = myTableView.getSelectionModel().getLeadSelectionIndex(); myTableView.scrollRectToVisible(myTableView.getCellRect(selectedIndex, 0, true)); List<T> aliveElements = new ArrayList<>(); for(int row = 0; row < myTableView.getRowCount(); ++row) { T selectedElement = myElements.get(row); if(!myTableView.isRowSelected(row) || !canDeleteElement(selectedElement)) { aliveElements.add(selectedElement); } } myElements.clear(); myElements.addAll(aliveElements); myTableView.getSelectionModel().clearSelection(); myTableView.getTableViewModel().setItems(myElements); int prev = selectedIndex - 1; if (prev >= 0) { myTableView.getComponent().getSelectionModel().setSelectionInterval(prev, prev); } else if (selectedIndex < myElements.size()) { myTableView.getComponent().getSelectionModel().setSelectionInterval(selectedIndex, selectedIndex); } myTableView.getComponent().revalidate(); myTableView.getComponent().repaint(); }