当前位置: 首页 > 面试题库 >

java.lang.UnsupportedOperationException用于从javafx tableview中删除一行

孙财
2023-03-14
问题内容

我试图从javafx的tableview中删除所选记录。以下是我如何用数据填充表的方法:

public void setMainApp(MainAppClass mainApp){
    this.mainApp = mainApp;

    FilteredList<FileModel> filteredData = new FilteredList<>(mainApp.getFileData(), p -> true);

    // 2. Set the filter Predicate whenever the filter changes.
    filterField.textProperty().addListener((observable, oldValue, newValue) -> {
        filteredData.setPredicate(files -> {
            // If filter text is empty, display all files.
            if (newValue == null || newValue.isEmpty()) {
                return true;
            }

            String lowerCaseFilter = newValue.toLowerCase();
            if (files.getFileSubject().toLowerCase().indexOf(lowerCaseFilter) != -1) {
                return true; // Filter matches Subject.
            }
                else if (files.getFileDate().toLowerCase().indexOf(lowerCaseFilter) != -1) {
                return true; // Filter matches last name.
            }
            return false; // Does not match.
        });
    });

    // 3. Wrap the FilteredList in a SortedList. 
    SortedList<FileModel> sortedData = new SortedList<>(filteredData);

    // 4. Bind the SortedList comparator to the TableView comparator.
    sortedData.comparatorProperty().bind(fileTable.comparatorProperty());

    // 5. Add sorted (and filtered) data to the table.

    fileTable.setItems(sortedData);
}

那就是我删除记录的方式:

@FXML
private void deleteFile() {
    int selectedIndex = fileTable.getSelectionModel().getSelectedIndex();
    if (selectedIndex >= 0) {
        fileTable.getItems().remove(selectedIndex);
    } else {
        // Nothing selected.
        Alert alert = new Alert(AlertType.WARNING);
        alert.initOwner(mainApp.getPrimaryStage());
        alert.setTitle("No Selection");
        alert.showAndWait();
    }
}

但这会带来java.lang.UnsupportedOperationException错误。我在示例项目中做了同样的事情,一切顺利。那么,如何解决此问题?


问题答案:

从基础列表而不是过滤/排序列表中删除数据:

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


 类似资料:
  • 我为laravel安装了这个Cartalyst Stripe软件包,这对我来说只是个麻烦。。我只是不能让它工作,现在我决定完全删除它。因此,我在composer.json中删除了需要这个包的行。我从提供者的confing/app.php中删除了该行 我错过了什么?

  • 删除数据帧中的列时,我使用: 这工作很棒。为什么我不能用下面的? 因为可以以的方式访问列/Series,所以我希望这能起作用。

  • 问题内容: 我有一个名为的文件和一个名为的字符串,我知道该字符串是该文件的完整行,但是我不知道其行号,并且我想从文件中删除它,该怎么办? 可以使用awk吗? 问题答案:

  • 我正在使用gradle构建一个Spring Boot应用程序,我希望从war中删除文件,因为该文件将从外部加载(它运行在tomcat容器中,而不是嵌入式的)。 我查看了StackOverflow和Gradle文档,试图找出该做什么,但我不知道该绑定到哪个阶段,以及在创建war之前还是之后排除该文件。处理文件似乎也有多种方法。 我相信Maven使用作为等价物。

  • 我想删除我的DataFrame中的第一列,我在网上找到了答案。答案是删除列1、2和4。我想知道为什么这行代码可以删除列,轴在这里的作用是什么?

  • 问题内容: 我正在尝试删除包含特定字符串的特定行。 我有一个名为 numbers.txt 的文件,其内容如下: Peter· Tom TOM1 Inflammation 我要删除的是文件中的那个 tom ,所以我做了以下功能: 输出为: 彼得· 颜 如您所见,问题在于该函数删除了 tom 和 tom1 ,但是我不想删除 tom1 。我只想删除 tom 。这是我想要的输出: 彼得 TOM1 燕 有什