用于过滤 TableView 中数据的 JavaFX DatePicker 侦听器

Est*_*uez 0 javafx datepicker tableview

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

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

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

在图像中,如果它正常工作,它将仅显示 TID 16 和 17 的行,其中“Opened”列中的日期位于日期范围之间。

在此输入图像描述

fab*_*ian 5

LocalDate我假设您在项目类别中使用以下答案。如果您使用java.sql.Date以下问题解释如何进行转换:

LocalDate 和 sql.Date 之间的转换

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

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);
Run Code Online (Sandbox Code Playgroud)