Для обновления FilteredList
должен быть запущен прослушиватель, добавленный к ObservableList
.Изменение свойства элемента списка по умолчанию не сработает.
Если вы создаете список с использованием экстрактора для свойств элемента, которые должны вызывать изменения при обновлении, FilteredList
также обновляется.
Пример
public class Item {
private final int i;
private final BooleanProperty keep = new SimpleBooleanProperty();
public Item(int i) {
this.i = i;
}
@Override
public String toString() {
return Integer.toString(i);
}
public BooleanProperty keepProperty() {
return keep;
}
public boolean isKeep() {
return keep.get();
}
public void setKeep(boolean value) {
keep.set(value);
}
}
ObservableList<Item> data = FXCollections.observableArrayList(new Callback<Item, Observable[]>() {
@Override
public Observable[] call(Item param) {
return new Observable[] { param.keepProperty() };
}
});
for (int i = 0; i < 10; i++) {
data.add(new Item(i));
}
FilteredList<Item> filtered = new FilteredList<>(data, Item::isKeep);
filtered.addListener((Observable o) -> System.out.println(filtered));
data.get(3).setKeep(true);
data.get(6).setKeep(true);
data.get(7).setKeep(true);
data.get(3).setKeep(false);
Выход
[3]
[3, 6]
[3, 6, 7]
[6, 7]
Возвращение массива, содержащего несколько триггеров Observable
sобновление, если какой-либо из этих Observable
s изменен.
Я рекомендую двойную проверку, если keep
и delete
действительно свойства, связанные с типом элемента, или если вы просто добавили эти свойства, чтобывозможность разделить ваш список на 3 FilteredList
с.Будет ли таблица базы данных, содержащая элемент, содержать столбцы для этих значений?Вы бы сохранили их в выходном файле, если бы вам пришлось сохранять элементы в файл?
Если ответ на эти вопросы "Нет" , вам следует использовать 3 отдельных ObservableList
с.Перемещение элементов из одного списка в другой менее сложно, чем работа с двумя свойствами и фильтрация списка по ним.