以最简单的方式,我想根据两个DatePickers中选定日期的日期范围过滤TableView中的数据。
有没有办法添加一个监听器或类似于在TextFields上使用addListener的方法,还是有更好的方法来解决这个问题?我找不到任何解释这个的教程。
我是否应该在按下按钮时调用Postgres视图来更新表格?
在图像中,如果它正在工作,它将只显示TID 16和17的行,其中“已打开”列中的日期在日期范围之间。
答案 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);