Списки JavaFX не обновляются должным образомJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Списки JavaFX не обновляются должным образом

Сообщение Anonymous »

У меня проблема с ListView в JavaFX. Я воспроизвел проблему в небольшом приложении, доступном на BitBucket. Как вы видите на GIF-изображении ниже, у меня есть текстовое поле и список, содержащий набор элементов, поступающих из веб-службы. В приложении есть только контроллер HelloController.java.
Изображение

У меня две проблемы. (1) Элементы не удаляются и (2) фильтрация представления списка на основе содержимого текстового представления работает, но после фильтрации, когда текстовое представление становится пустым, в представление списка добавляются повторяющиеся элементы.
Удаление элементов из ListView
@FXML
protected void deleteItem(){
Privilege selectedItem = lstItems.getSelectionModel().getSelectedItem();
allPrivileges.remove(selectedItem);
ObservableList
filteredList = FXCollections.observableArrayList(allPrivileges);
lstItems.setItems(filteredList);
}

Фильтрация списка
private void filterPriviledges() {
String filter = txtItem.getText();
ObservableList
filteredList = FXCollections.observableArrayList(
allPrivileges.stream()
.filter(privilege -> privilege.getName().toLowerCase().startsWith(filter.toLowerCase()))
.collect(Collectors.toList())
);
lstItems.setItems(filteredList);
}

Коды для загрузки всех привилегий из веб-службы
void loadPrivileges() throws IOException {
Response response = apiService.getPrivileges().execute();
allPrivileges = response.body();
lstItems.setItems(FXCollections.observableArrayList(allPrivileges));
lstItems.setCellFactory(
new Callback() {
@Override
public ListCell call(ListView param) {
return new ListCell() {
@Override
public void updateItem(Privilege privilege, boolean empty) {
super.updateItem(privilege, empty);
if (!empty){
setText(privilege.getName());
}
}
};
}
}
);

}


Подробнее здесь: https://stackoverflow.com/questions/785 ... g-properly
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»