如何在Javafx中过滤tableview中的数据

如何在Javafx中过滤tableview中的数据,java,javafx,tableview,Java,Javafx,Tableview,我在java fx中有一个tableview,它显示不同类型的数据,如字符串和整数。我希望有一个数据过滤器,以便它在table view中自动显示数据。如何实现这一点?目前我正在使用一个函数,但它不起作用。注意:“pers”是我正在使用的类的一个对象 void SearchUser(){ FilteredList<Issue> filteredData=new FilteredList<>(Ilist,b->true); filterField.te

我在java fx中有一个tableview,它显示不同类型的数据,如字符串和整数。我希望有一个数据过滤器,以便它在table view中自动显示数据。如何实现这一点?目前我正在使用一个函数,但它不起作用。注意:“pers”是我正在使用的类的一个对象

void SearchUser(){
    FilteredList<Issue> filteredData=new FilteredList<>(Ilist,b->true);
    filterField.textProperty().addListener((observable, oldValue, newValue) -> {
        filteredData.setPredicate(pers->{
            if(newValue==null||newValue.isEmpty()){
                return true;
            }
            String lowerCaseFilter=newValue.toLowerCase();
            if(pers.getCreator().toLowerCase().indexOf(lowerCaseFilter)!=-1){
                return true;
            }
            else if(pers.getIssueTitle().toLowerCase().indexOf(lowerCaseFilter)!=-1){
                return true;
            }
            else if(String.valueOf(pers.getIssueNo()).indexOf(lowerCaseFilter)!=-1){
                return true;
            } else if(pers.getStatus().toLowerCase().indexOf(lowerCaseFilter)!=-1){
                return true;
            }
            else if(pers.getAssignee().toLowerCase().indexOf(lowerCaseFilter)!=-1){
                return true;
            }
            else if(pers.getTime().toLowerCase().indexOf(lowerCaseFilter)!=-1){
                return true;
            }
            else if(String.valueOf(pers.getPriority()).indexOf(lowerCaseFilter)!=-1){
                return true;
            }
            else if(pers.getTag().toLowerCase().indexOf(lowerCaseFilter)!=-1){
                return true;
            }
            else{
                return false;
            }
        });
    });
    SortedList<Issue> sortedData=new SortedList<>(filteredData);
    sortedData.comparatorProperty().bind(IssueTable.comparatorProperty());
    IssueTable.setItems(sortedData);

}
void SearchUser(){
FilteredList filteredData=新的FilteredList(Ilist,b->true);
filterField.textProperty().addListener((可观察、旧值、新值)->{
filteredData.setPredicate(pers->{
if(newValue==null | | newValue.isEmpty()){
返回true;
}
字符串lowerCaseFilter=newValue.toLowerCase();
if(pers.getCreator().toLowerCase().indexOf(lowerCaseFilter)!=-1){
返回true;
}
else if(pers.getIssueTile().toLowerCase().indexOf(lowerCaseFilter)!=-1){
返回true;
}
else if(String.valueOf(pers.getIssueNo()).indexOf(小写过滤器)!=-1){
返回true;
}else if(pers.getStatus().toLowerCase().indexOf(lowerCaseFilter)!=-1){
返回true;
}
else if(pers.getAssignment().toLowerCase().indexOf(lowerCaseFilter)!=-1){
返回true;
}
else if(pers.getTime().toLowerCase().indexOf(lowerCaseFilter)!=-1){
返回true;
}
else if(String.valueOf(pers.getPriority()).indexOf(小写过滤器)!=-1){
返回true;
}
else if(pers.getTag().toLowerCase().indexOf(lowerCaseFilter)!=-1){
返回true;
}
否则{
返回false;
}
});
});
SortedList sortedData=新的SortedList(filteredData);
sortedData.comparatorProperty().bind(可发布的.comparatorProperty());
可发行。设置项目(分类数据);
}

好的,谢谢各位,我已经解决了这个问题

问题不在于函数本身,而在于我在将任何数据放入tableview之前正在运行此方法。因为我没有添加任何异常处理事件,所以我的代码抛出NullPointerError


感谢大家的帮助

使用
如果(pers.getCreator().toLowerCase().contains(lowercaseefilter))
会使代码更简短、更轻巧。。坚持java命名约定到底是什么问题?换句话说,它以什么方式不工作?我的意思是,当我在文本字段中键入时,tableview中没有任何更改