JavaFX | Сумма TableView для указанного столбца c - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть таблица с фильтрами. Один - это диапазон дат (от, до), а другой - фильтр имен. Я хочу рассчитать сумму данных в определенном столбце, даже когда я применяю фильтры в режиме реального времени. Как мне этого добиться?

    @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, это то, что имеет смысл для меня. Что мне не хватает? Что мне делать? Спасибо

...