JavaFX DatePicker监听器在TableView中过滤数据

时间:2018-04-18 05:24:53

标签: javafx datepicker tableview

以最简单的方式,我想根据两个DatePickers中选定日期的日期范围过滤TableView中的数据。

有没有办法添加一个监听器或类似于在TextFields上使用addListener的方法,还是有更好的方法来解决这个问题?我找不到任何解释这个的教程。

我是否应该在按下按钮时调用Postgres视图来更新表格?

在图像中,如果它正在工作,它将只显示TID 16和17的行,其中“已打开”列中的日期在日期范围之间。

enter image description here

1 个答案:

答案 0 :(得分:2)

以下答案我假设您在商品类中使用LocalDate。如果您使用java.sql.Date,则以下问题说明如何进行转换:

Convert between LocalDate and sql.Date

使用FilteredList过滤完整的数据集(假设db表足够小,可以将其存储在客户端的内存中)。

ObservableList<TableItem> allItems = ...
FilteredList<TableItem> filteredItems = new FilteredList<>(allItems);

// bind predicate based on datepicker choices
filteredItems.predicateProperty().bind(Bindings.createObjectBinding(() -> {
        LocalDate minDate = startPicker.getValue();
        LocalDate maxDate = endPicker.getValue();

        // get final values != null
        final LocalDate finalMin = minDate == null ? LocalDate.MIN : minDate;
        final LocalDate finalMax = maxDate == null ? LocalDate.MAX : maxDate;

        // values for openDate need to be in the interval [finalMin, finalMax]
        return ti -> !finalMin.isAfter(ti.getOpenDate()) && !finalMax.isBefore(ti.getOpenDate());
    },
    startPicker.valueProperty(),
    endPicker.valueProperty()));

tableView.setItems(filteredItems);