gpt4 book ai didi

java - 基于 ChoiceBox 选择过滤 observableArrayList

转载 作者:太空宇宙 更新时间:2023-11-04 06:30:18 25 4
gpt4 key购买 nike

我有一个 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 相关的答案,但大多数情况是根据属性中的关键字搜索进行过滤。

最佳答案

使用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.DateCalendar 类。

关于java - 基于 ChoiceBox 选择过滤 observableArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26198416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com