在筛选JavaFX TableView行时执行代码
我正在使用一个TextField来过滤JavaFX TableView的行,这会导致一个SortedList,它被设置为TableView,并且可以工作,我还创建了一个函数,将SortedList作为参数来做其他事情,问题是SortedList不会改变值,尽管过滤在表中生效,这是否意味着筛选会隐藏行,而不会将其从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&
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