【问题标题】:Deleting items other than the selected ones in listview in javafx删除javafx中listview中选定项目以外的项目
【发布时间】:2018-12-13 18:49:16
【问题描述】:

我一直在尝试删除 javafx 中列表视图中选定项目以外的所有项目。我已经编写了以下代码。它有时有效,有时无效。我无法弄清楚我的错误。任何帮助将不胜感激!

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();
}

【问题讨论】:

  • 你的计数器的目的是什么?
  • @KeyMaker00 应该很明显:它是测试删除的索引。如果选择了索引,则代码应该遍历列表的索引和每次索引检查,如果未选择索引,则删除索引 i 处的项目。
  • @fabian:没错,所以变量也应该表达这个意图(代码味道)。 (+1 供您解释)

标签: java listview javafx


【解决方案1】:

您可以简单地创建要保留的项目数组并使用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();
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-04
    • 1970-01-01
    • 2014-02-11
    • 2012-08-10
    • 1970-01-01
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多