ListView не обновляется при обновлении атрибутов элементов наблюдаемого списка (JavaFX)JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 ListView не обновляется при обновлении атрибутов элементов наблюдаемого списка (JavaFX)

Сообщение Anonymous »


Предположим, у меня есть наблюдаемый список с типом класса Food. Класс имеет 3 атрибута: строку с именем name, свойство объекта типа LocalDateTime с именем (дата истечения срока действия) и логическое свойство с именем (выбрано).

Предположим, у меня есть 3 элемента в списке и графический макет для заполнения ListView. Макет представляет собой квадрат с двумя метками для отображения названия и срока годности. и когда я нажимаю на элемент (выбираю элемент), макет становится синим, например, в соответствии с логическим свойством.

Проблема, с которой я столкнулся, заключается в том, что выбор работает правильно (правильно обновляется представление списка), но при изменении даты ListView не обновляет ячейку, хотя я попробовал экстрактор. Я даже добавил прослушиватель, чтобы проверить, фиксирует ли он изменение, и он это делает, но ListView по-прежнему не обновляет ячейку. ListView корректно обновляется при использовании метода set наблюдаемого списка, заменяя тот же элемент только для запуска ListView. Обновление ListView также работает, но я не хочу обновлять весь список, а только обновленный элемент.

Можете ли вы объяснить мне, почему это происходит и как это исправить?

Я попробовал экстрактор, я даже добавил прослушиватель, чтобы проверить, фиксирует ли он изменение, и он это делает, но ListView по-прежнему не обновляет ячейку.

Пример кода: класс =>

публичный класс Еда { частная строка food_name; частный BooleanProperty is_selected; частный ObjectProperty expiration_date; public Food (String food_name, логическое значение is_selected, LocalDateTime expiration_date) { this.food_name = food_name; this.is_selected = новый SimpleBooleanProperty(is_selected); this.expiration_date =new SimpleObjectProperty(expiration_date); } //...геттеры и сеттеры

пример:

public void example(){ ObservableList food= FXCollections.observableArrayList(); food.add(new Food("рыба",true, LocalDateTime.now())); food.add(new Food("milk",false,LocalDateTime.now().minusDays(1))); ListView foodListView=новый ListView(); foodListView.setItems(еда); foodListView.setCellFactory(foodListView1 -> { вернуть новую food_cell(); }); } Проблема: когда я меняю выбранное свойство, ListView обновляется, а графический макет меняет цвет, но когда я меняю свойство даты, это изменение не отражается на макете (ListView не обновляет элемент).
Ответить

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

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

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

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

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