英文:
JavaFX| TableView sum of specific column
问题
我有一个带有筛选器的表格视图。其中一个是日期范围(起始日期,结束日期),另一个是名称筛选器。
我想在实时应用筛选器时计算特定列中的数据总和。我该如何实现?
@Override
public void initialize(URL location, ResourceBundle resources) {
loadSalesReports(); // 从数据库中加载数据并保存在类级别的ArrayList savedLubesSalesReportsList 中
FilteredList<LubesSalesReport> filteredData = new FilteredList<>(FXCollections.observableArrayList(savedLubesSalesReportsList), p -> true);
// DatePicker txtEndDate(日期筛选的最大范围)
txtEndDate.getEditor().textProperty().addListener((observable, oldValue, newValue) -> {
filteredData.setPredicate(pumpData -> {
// 按日期筛选
if (pumpData.getDate().before(dateTo) || pumpData.getDate().equals(dateTo)) {
if (pumpData.getDate().after(dateFrom) || pumpData.getDate().equals(dateFrom)) {
// 在这里进行计算总和
double total = 0;
for(LubesSalesReport lsr : tblLubesReport.getItems()){
total = total + lsr.getAmount();
}
txtTotal.setText(String.valueOf(total));
return true; // 这将根据日期筛选表格,但不会在筛选后计算新的总和
}
}
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++) {
// 表格的列
}
// 显示整个表格的初始总和,按预期工作
double total = 0;
for(LubesSalesReport lsr : tblLubesReport.getItems()){
total = total + lsr.getAmount();
}
txtTotal.setText(String.valueOf(total));
}
当我设置结束日期时,表格被筛选,但新的总和计算不会显示(仍然显示初始值)。我该如何解决这个问题?我尝试在筛选方法中的 return
之前添加总和,这在我看来是有道理的。我漏掉了什么?我应该怎么做?谢谢。
英文:
I have a tableview with filters. One is a date range (from, to) and the other is a name filter.
I want to calculate the sum of data in a particular column even when i'm applying filters in real time. How can I achieve this?
@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));
}
When I set the end date, my table is filtered, but new sum calculation isn't shown (displays initial one instead). How may I resolve this? I just tried adding the sum in the filter method before they return
, it's what made sense to me. What am I missing? What should I do? Thanks
专注分享java语言的经验与见解,让所有开发者获益!
评论