java.lang.UnsupportedOperationException for removing a row from the javafx tableview

依然范特西╮ 提交于 2019-12-02 02:02:51

Remove the data from the underlying list, not the filtered/sorted list:

FileModel selectedItem = fileTable.getSelectionModel().getSelectedItem();
if (selectedItem != null) {
    mainApp.getFileData().remove(selectedItem);
}

SortedList and FilteredList inherit the remove method from AbstractList which does not support remove(index). You have to remove the object from the source list (mainApp.getFileData()) As the selected index might not be the correct index in the source list (after filtering), there is a method to get the correct index in the source list

sortedData.getSourceIndexFor(mainApp.getFileData(), selectedIndex);

So you should change your code to

@FXML
private void deleteFile() {
  int selectedIndex = fileTable.getSelectionModel().getSelectedIndex();
  if (selectedIndex >= 0) {
    int sourceIndex = sortedData.getSourceIndexFor(mainApp.getFileData(), selectedIndex);
    mainApp.getFileData().remove(sourceIndex);
  }
}

I have removed the else cause in this example to reduce it to the minimum.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!