У меня есть таблица с фильтрами. Один - это диапазон дат (от, до), а другой - фильтр имен. Я хочу рассчитать сумму данных в определенном столбце, даже когда я применяю фильтры в режиме реального времени. Как мне этого добиться?
@Override
public void initialize(URL location, ResourceBundle resources) {
loadSalesReports(); //saves the data from database in class level arrayList = savedLubesSalesReportsList
FilteredList<LubesSalesReport> filteredData = new FilteredList<>(FXCollections.observableArrayList(savedLubesSalesReportsList), p -> true);
//DatePicker txtEndDate (max range of date filter)
txtEndDate.getEditor().textProperty().addListener((observable, oldValue, newValue) -> {
filteredData.setPredicate(pumpData -> {
//filters by dates
if (pumpData.getDate().before(dateTo) || pumpData.getDate().equals(dateTo)) {
if (pumpData.getDate().after(dateFrom) || pumpData.getDate().equals(dateFrom)) {
//calculate sum here
double total = 0;
for(LubesSalesReport lsr:tblLubesReport.getItems()){
total = total+lsr.getAmount();
}
txtTotal.setText(String.valueOf(total));
return true; //this filters table by dates but doesn;t calculate new sum after filter
}
}
return false;
});
});
SortedList<LubesSalesReport> sortedData = new SortedList<>(filteredData);
sortedData.comparatorProperty().bind(tblLubesReport.comparatorProperty());
//TableView<LubesSalesReport> tblLubesReport;
tblLubesReport.setItems(sortedData);
for (int i = 0; i < savedLubesSalesReportsList.size(); i++) {
//columns for table
}
//displays initial sum for entire table, works as intended
double total = 0;
for(LubesSalesReport lsr:tblLubesReport.getItems()){
total = total+lsr.getAmount();
}
txtTotal.setText(String.valueOf(total));
}
Когда я устанавливаю дату окончания, моя таблица фильтруется, но новое вычисление суммы не отображается (вместо этого отображается начальное значение). Как я могу решить это? Я просто попытался добавить сумму в методе фильтра, прежде чем они return
, это то, что имеет смысл для меня. Что мне не хватает? Что мне делать? Спасибо