JavaFX:清除ListView

时间:2014-06-13 13:45:45

标签: listview javafx

我想在点击某个按钮时清除ListView中的所有内容。我试图通过索引删除它,但它给了我例外。我没有完全得到ListView的SelectionModel。以下是我的尝试:

asiLogsListView.getSelectionModel().selectAll();
        ObservableList<Integer> indices = asiLogsListView.getSelectionModel().getSelectedIndices();
        for(int index : indices) {
            asiLogsListView.getSelectionModel().getSelectedItems().remove(index);
        }

asiLogsListView.getSelectionModel().getSelectedItems().removeAll(indices);

2 个答案:

答案 0 :(得分:10)

要清除ListView中的所有项目,只需执行

asiLogsListView.getItems().clear();

如果要清除选择,请执行

asiLogsListView.getSelectionModel().clearSelection();

棘手的是从ListView

中删除所有选定的项目
List<Integer> selectedItemsCopy = new ArrayList<>(asiLogsListView.getSelectionModel().getSelectedItems());
asiLogsListView.getItems().removeAll(selectedItemsCopy);

您的代码似乎正在尝试清除选择,因为您尝试从selectionModel selectedItems列表中删除所有元素。问题在于,当您删除每个项目时,其余项目的索引会发生变化,因此您最终会删除错误的项目,最终可能会导致ArrayIndexOutOfBoundsException s(如果您的项目数量少于所选项目的最大索引。)

答案 1 :(得分:2)

原始问题是:ListView.getSelectionMode()返回其可观察列表的一部分,但不返回副本。因此,从该列表中删除会导致各种问题。

使用下一个代码复制列表,然后再从中删除项目:

sendRightButton.setOnAction(new EventHandler<ActionEvent>() {
    public void handle(ActionEvent event) {
        ObservableList<String> potential = 
            FXCollections.observableArrayList( //copy
                candidatesListView.getSelectionModel().getSelectedItems());
        if (potential != null) {
            heroes.addAll(potential);
            candidates.removeAll(potential);
            candidatesListView.getSelectionModel().clearSelection();
        }
    }
});

更多详情:http://javafx-jira.kenai.com/browse/RT-24367