在筛选JavaFX TableView行时执行代码

在筛选JavaFX TableView行时执行代码,java,javafx,filter,tableview,rows,Java,Javafx,Filter,Tableview,Rows,我正在使用一个TextField来过滤JavaFX TableView的行,这会导致一个SortedList,它被设置为TableView,并且可以工作,我还创建了一个函数,将SortedList作为参数来做其他事情,问题是SortedList不会改变值,尽管过滤在表中生效,这是否意味着筛选会隐藏行,而不会将其从TableView初始列表中删除?请帮助,以下是我的代码: FilteredList<CommandeFX> filteredData = new FilteredList&

我正在使用一个TextField来过滤JavaFX TableView的行,这会导致一个SortedList,它被设置为TableView,并且可以工作,我还创建了一个函数,将SortedList作为参数来做其他事情,问题是SortedList不会改变值,尽管过滤在表中生效,这是否意味着筛选会隐藏行,而不会将其从TableView初始列表中删除?请帮助,以下是我的代码:

FilteredList<CommandeFX> filteredData = new FilteredList<>(data, p -> true);

    // 2. Set the filter Predicate whenever the filter changes.
    filterField.textProperty().addListener((observable, oldValue, newValue) -> {
        filteredData.setPredicate(commande -> {
            // If filter text is empty, display all persons.
            if (newValue == null || newValue.isEmpty()) {
                return true;
            }

            // Compare first name and last name of every person with filter text.
            String lowerCaseFilter = newValue.toLowerCase();

            if (String.valueOf(commande.getCodeCommande()).toLowerCase().contains(lowerCaseFilter)) {
                return true;
                 // Filter matches first name.

            } else if (String.valueOf(commande.getCMD()).toLowerCase().contains(lowerCaseFilter)) {
                return true; // Filter matches last name.
            }
            else if (String.valueOf(commande.getClient()).toLowerCase().contains(lowerCaseFilter)) {                                  
                return true; // Filter matches last name.
            }
            else if (String.valueOf(commande.getFournisseur()).toLowerCase().contains(lowerCaseFilter)) {
                return true; // Filter matches last name.
            }
            else if (String.valueOf(commande.getQuantite()).toLowerCase().contains(lowerCaseFilter)) {
                return true; // Filter matches last name.
            }
            else if (String.valueOf(commande.getPrixCommande()).toLowerCase().contains(lowerCaseFilter)) {
                return true; // Filter matches last name.
            }
            else if (String.valueOf(commande.getSommeProperty()).toLowerCase().contains(lowerCaseFilter)) {
                return true; // Filter matches last name.
            }
            else if (String.valueOf(commande.getResteCommandeProperty()).toLowerCase().contains(lowerCaseFilter)) {
                return true; // Filter matches last name.
            }
            else if (String.valueOf(commande.getDateCommande()).toLowerCase().contains(lowerCaseFilter)) {
                return true; // Filter matches last name.
            }
            else if (String.valueOf(commande.getDateReception()).toLowerCase().contains(lowerCaseFilter)) {
                return true; // Filter matches last name.
            }
            else if (String.valueOf(commande.getModified()).toLowerCase().contains(lowerCaseFilter)) {
                return true; // Filter matches last name.
            }
            else if (String.valueOf(commande.getValide()).toLowerCase().contains(lowerCaseFilter)) {
                return true; // Filter matches last name.
            }

            return false; // Does not match.
        });
    });


    // 3. Wrap the FilteredList in a SortedList. 
    SortedList<CommandeFX> sortedData = new SortedList<>(filteredData);    

    // 4. Bind the SortedList comparator to the TableView comparator.
    sortedData.comparatorProperty().bind(tableCommandes.comparatorProperty());
    // 5. Add sorted (and filtered) data to the table.
    tableCommandes.setItems(sortedData);
    // the function 
    setSum(sortedData);
FilteredList filteredData=newfilteredlist(数据,p->true);
// 2. 每当过滤器更改时,设置过滤器谓词。
filterField.textProperty().addListener((可观察、旧值、新值)->{
setPredicate(命令->{
//如果筛选文本为空,则显示所有人员。
if(newValue==null | | newValue.isEmpty()){
返回true;
}
//将每个人的名字和姓氏与筛选文本进行比较。
字符串lowerCaseFilter=newValue.toLowerCase();
if(String.valueOf(commande.getCodeCommande()).toLowerCase()包含(lowerCaseFilter)){
返回true;
//筛选器与第一个名称匹配。
}else if(String.valueOf(commande.getCMD()).toLowerCase()包含(lowerCaseFilter)){
返回true;//筛选器与姓氏匹配。
}
else if(String.valueOf(commande.getClient()).toLowerCase()包含(lowerCaseFilter)){
返回true;//筛选器与姓氏匹配。
}
else if(String.valueOf(commande.getFournisseur()).toLowerCase().contains(lowerCaseFilter)){
返回true;//筛选器与姓氏匹配。
}
else if(String.valueOf(commande.getQuantite()).toLowerCase()包含(lowerCaseFilter)){
返回true;//筛选器与姓氏匹配。
}
else if(String.valueOf(commande.getPrixCommande()).toLowerCase()包含(lowerCaseFilter)){
返回true;//筛选器与姓氏匹配。
}
else if(String.valueOf(command.getSommeProperty()).toLowerCase().contains(lowerCaseFilter)){
返回true;//筛选器与姓氏匹配。
}
else if(String.valueOf(commande.getResteCommandeProperty()).toLowerCase().contains(lowerCaseFilter)){
返回true;//筛选器与姓氏匹配。
}
else if(String.valueOf(commande.getDateCommande()).toLowerCase()包含(lowerCaseFilter)){
返回true;//筛选器与姓氏匹配。
}
else if(String.valueOf(commande.getDateReception()).toLowerCase().contains(lowerCaseFilter)){
返回true;//筛选器与姓氏匹配。
}
else if(String.valueOf(commande.getModified()).toLowerCase()包含(lowerCaseFilter)){
返回true;//筛选器与姓氏匹配。
}
else if(String.valueOf(commande.getValide()).toLowerCase()包含(lowerCaseFilter)){
返回true;//筛选器与姓氏匹配。
}
返回false;//不匹配。
});
});
// 3. 将FilteredList包装在一个SortedList中。
SortedList sortedData=新的SortedList(filteredData);
// 4. 将SortedList比较器绑定到TableView比较器。
sortedData.comparatorProperty().bind(tableCommandes.comparatorProperty());
// 5. 将排序(和筛选)数据添加到表中。
tableCommandes.setItems(sortedData);
//功能
设定值(数据);

事实上,我没有注意到每次我在filter文本字段中键入时要调用的函数不在正确的位置。现在,当我在过滤器中键入时,会实时调用函数
getSum(SortedList Commande list)
。以下是正确的代码:

FilteredList<CommandeFX> filteredData = new FilteredList<>(data, p -> true);

// 2. Set the filter Predicate whenever the filter changes.
filterField.textProperty().addListener((observable, oldValue, newValue) -> {
    filteredData.setPredicate(commande -> {
        // If filter text is empty, display all persons.
        if (newValue == null || newValue.isEmpty()) {
            return true;
        }

        // Compare first name and last name of every person with filter text.
        String lowerCaseFilter = newValue.toLowerCase();

        if (String.valueOf(commande.getCodeCommande()).toLowerCase().contains(lowerCaseFilter)) {
            return true;
             // Filter matches first name.

        } else if (String.valueOf(commande.getCMD()).toLowerCase().contains(lowerCaseFilter)) {
            return true; // Filter matches last name.
        }
        else if (String.valueOf(commande.getClient()).toLowerCase().contains(lowerCaseFilter)) {                                  
            return true; // Filter matches last name.
        }
        else if (String.valueOf(commande.getFournisseur()).toLowerCase().contains(lowerCaseFilter)) {
            return true; // Filter matches last name.
        }
        else if (String.valueOf(commande.getQuantite()).toLowerCase().contains(lowerCaseFilter)) {
            return true; // Filter matches last name.
        }
        else if (String.valueOf(commande.getPrixCommande()).toLowerCase().contains(lowerCaseFilter)) {
            return true; // Filter matches last name.
        }
        else if (String.valueOf(commande.getSommeProperty()).toLowerCase().contains(lowerCaseFilter)) {
            return true; // Filter matches last name.
        }
        else if (String.valueOf(commande.getResteCommandeProperty()).toLowerCase().contains(lowerCaseFilter)) {
            return true; // Filter matches last name.
        }
        else if (String.valueOf(commande.getDateCommande()).toLowerCase().contains(lowerCaseFilter)) {
            return true; // Filter matches last name.
        }
        else if (String.valueOf(commande.getDateReception()).toLowerCase().contains(lowerCaseFilter)) {
            return true; // Filter matches last name.
        }
        else if (String.valueOf(commande.getModified()).toLowerCase().contains(lowerCaseFilter)) {
            return true; // Filter matches last name.
        }
        else if (String.valueOf(commande.getValide()).toLowerCase().contains(lowerCaseFilter)) {
            return true; // Filter matches last name.
        }

        return false; // Does not match.
    });



      // 3. Wrap the FilteredList in a SortedList. 
      SortedList<CommandeFX> sortedData = new SortedList<>(filteredData);    

      // 4. Bind the SortedList comparator to the TableView comparator.
  sortedData.comparatorProperty().bind(tableCommandes.comparatorProperty());
     // 5. Add sorted (and filtered) data to the table.
     tableCommandes.setItems(sortedData);
     // the function 
     setSum(sortedData);

});
FilteredList filteredData=newfilteredlist(数据,p->true);
// 2. 每当过滤器更改时,设置过滤器谓词。
filterField.textProperty().addListener((可观察、旧值、新值)->{
setPredicate(命令->{
//如果筛选文本为空,则显示所有人员。
if(newValue==null | | newValue.isEmpty()){
返回true;
}
//将每个人的名字和姓氏与筛选文本进行比较。
字符串lowerCaseFilter=newValue.toLowerCase();
if(String.valueOf(commande.getCodeCommande()).toLowerCase()包含(lowerCaseFilter)){
返回true;
//筛选器与第一个名称匹配。
}else if(String.valueOf(commande.getCMD()).toLowerCase()包含(lowerCaseFilter)){
返回true;//筛选器与姓氏匹配。
}
else if(String.valueOf(commande.getClient()).toLowerCase()包含(lowerCaseFilter)){
返回true;//筛选器与姓氏匹配。
}
else if(String.valueOf(commande.getFournisseur()).toLowerCase().contains(lowerCaseFilter)){
返回true;//筛选器与姓氏匹配。
}
else if(String.valueOf(commande.getQuantite()).toLowerCase()包含(lowerCaseFilter)){
返回true;//筛选器与姓氏匹配。
}
else if(String.valueOf(commande.getPrixCommande()).toLowerCase()包含(lowerCaseFilter)){
返回true;//筛选器与姓氏匹配。
}
else if(String.valueOf(command.getSommeProperty()).toLowerCase().contains(lowerCaseFilter)){
返回true;//筛选器与姓氏匹配。
}
else if(String.valueOf(commande.getResteCommandeProperty()).toLowerCase().contains(lowerCaseFilter)){
返回true;//筛选器与姓氏匹配。
}
else if(String.valueOf(commande.getDateCommande()).toLowerCase()包含(LowercaseFilt