Удаление элементов, отличных от выбранных, в списке просмотра в javafx - PullRequest
0 голосов
/ 05 июля 2018

Я пытался удалить все элементы, кроме выбранных в списке просмотра в 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();
}

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Вы можете просто создать массив элементов для хранения и использовать 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();
});
0 голосов
/ 05 июля 2018

Вы можете получить выбранные элементы, поместить их в ObservableList, затем вы можете использовать removeIf из Java8 следующим образом:

ObservableList<String> selectedItems = listName.getSelectionModel().getSelectedItems();
listName.getItems().removeIf(item -> !selectedItems.contains(item));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...