java - 基于 ChoiceBox 选择过滤 observableArrayList

标签 java javafx-8

我有一个 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/

相关文章:

java - GridView 的 Adapter 中的元素编号错误

css - 更改不同 Controller 中节点的 Id

java - 在单元测试中等待 Platform.RunLater

java - 如何编写一个接受类类型作为参数的方法,并使用它来转换一些对象

java - 我怎样才能归还我的卡片阵列?

java - Java的RAM使用情况与任务管理器所说的不符

java - 如何为旋转的陀螺制作动画?

java - 如何在窗口关闭时关闭 JavaFX 应用程序?

JavaFX 和 iText7

Java:在 Eclipse 中导出 Java 项目(不是作为 JAR)时包含外部 jar