我有一个observableArrayList使用来自DDBB的数据进行扩充。列表的每个项目都有一个Date属性。我使用TableView来显示observableArrayList数据。
datos = observableArrayList();
datos.addAll(new TablaDAO().obtenItems()); //Get all items without any filter (I show this by default)
默认情况下,用户查看所有项目,但我有一个ChoiceBox,用户可以选择一个句点(例如,最近30天)并根据用户的选择,仅限表格 显示日期小于30天的行。
chFiltrar.getSelectionModel().selectedIndexProperty().addListener((ObservableValue<? extends Number> observable, Number oldValue, Number newValue) -> {
if (newValue.intValue() == 0) { //30 days
//I need to show only items where date<last 30 days
} else if (newValue.intValue() == 2) { //All days
//This option works well because I show all items
}
});
我找到与使用FilteredList相关的答案,但大多数情况下都要根据属性中的关键字搜索来过滤。
答案 0 :(得分:0)
使用FilteredList
是正确的方法。你会做类似
datos = observableArrayList();
datos.addAll(new TablaDAO().obtenItems()); //Get all items without any filter (I show this by default)
FilteredList<Date> filteredList = new FilteredList<>(datos);
table.setItems(filteredList);
然后
chFiltrar.getSelectionModel().selectedIndexProperty().addListener((ObservableValue<? extends Number> observable, Number oldValue, Number newValue) -> {
if (newValue.intValue() == 0) { //30 days
//I need to show only items where date<last 30 days
Calendar now = Calendar.getInstance();
filteredList.setFilter(date -> {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return now.add(Calendar.DAY_OF_MONTH, -30).before(date);
});
} else if (newValue.intValue() == 2) { //All days
//This option works well because I show all items
filteredList.setFilter(date -> true);
}
});
我强烈建议您重写代码以使用新的java.time
API,而不是旧的java.util.Date
和Calendar
类。