Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javafx中删除除listview中所选项目以外的其他项目_Java_Listview_Javafx - Fatal编程技术网

在javafx中删除除listview中所选项目以外的其他项目

在javafx中删除除listview中所选项目以外的其他项目,java,listview,javafx,Java,Listview,Javafx,我一直在尝试删除除javafx中listview中所选项目之外的所有项目。我已经编写了以下代码。它有时有效,有时无效。我无法找出我的错误。任何帮助都将不胜感激 try { int i = 0; while (!listName.getItems().equals(listName.getSelectionModel().getSelectedItems())) { if (listName.getSelectionModel().isSelected(i) ==

我一直在尝试删除除javafx中listview中所选项目之外的所有项目。我已经编写了以下代码。它有时有效,有时无效。我无法找出我的错误。任何帮助都将不胜感激

try {
    int i = 0;
    while (!listName.getItems().equals(listName.getSelectionModel().getSelectedItems())) {
        if (listName.getSelectionModel().isSelected(i) == false) {
            listName.getItems().remove(i);
            i--;
        }
        i++;
    }
} catch (Exception e) {
    e.printStackTrace();
}

您只需创建一个要保留的项目数组,并使用
ObservableList.setAll
替换整个列表:

ListView<Character> listView = new ListView<>();
for (char c = 'a'; c <= 'z'; c++) {
    listView.getItems().add(c);
}
listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

Button delete = new Button("delete");
delete.setOnAction(evt -> {
    Character[] selection = listView.getSelectionModel()
            .getSelectedIndices()
            .stream()
            .sorted()
            .map(listView.getItems()::get)
            .toArray(Character[]::new);

    listView.getItems().setAll(selection);
    listView.getSelectionModel().selectAll();
});
ListView ListView=新建ListView();
for(char c='a';c{
Character[]selection=listView.getSelectionModel()
.getSelectedIndices()
.stream()
.已排序()
.map(listView.getItems()::get)
.toArray(字符[]::新建);
listView.getItems().setAll(选择);
getSelectionModel().selectAll();
});

您的计数器i的用途是什么?@KeyMaker00应该很明显:它是经过删除测试的索引。如果选择了索引,则代码应该遍历列表的索引,并且对于每次索引检查,如果未选择,则删除索引
i
处的项。@fabian:没错,因此变量也应该表示此意图(代码气味)。(+1供您解释)