Java 网格中的瓦丁滤波器

Java 网格中的瓦丁滤波器,java,vaadin,vaadin7,Java,Vaadin,Vaadin7,我在瓦丁的过滤器有问题。为网格中的每一列制作过滤器很容易。但现在我需要为网格中的所有单元格做一个过滤器。 我不知道怎么做 在这个例子中,我试图这样做,但没有成功 Filter f = new Or(new SimpleStringFilter(Columns.SEARCH.id(), "rpm-diastolic", true, false), new Or(new SimpleStringFilter(Columns.SEARCH.id(), "rpm-systolic", t

我在瓦丁的过滤器有问题。为网格中的每一列制作过滤器很容易。但现在我需要为网格中的所有单元格做一个过滤器。 我不知道怎么做

在这个例子中,我试图这样做,但没有成功

    Filter f  = 
new Or(new SimpleStringFilter(Columns.SEARCH.id(), "rpm-diastolic", true, false),  
new Or(new SimpleStringFilter(Columns.SEARCH.id(), "rpm-systolic", true, false)),
new Or(new SimpleStringFilter(Columns.SEARCH.id(), "rpm-weight", true, false))) ;
container.addContainerFilter(f);

我为我的案子创造了一个解决方案。我希望这能帮助别人

//In my case, I created a class that extends Grid.
public class GridExample extends Grid {   

    ...

    //Method to add a filter on grid
    public void setFilterGrid(BeanItemContainer<?> beanType) {
        //This create a HeaderRow to add filter fields
        HeaderRow filterRow = this.appendHeaderRow();
        for (Column column : getColumns()) {
            //For each column from the grid
            HeaderCell cellFilter = filterRow.getCell(column.getPropertyId());
            //Add a textfield
            cellFilter.setComponent(createFieldFilter(beanType, column));       
        }       
    } 

   //This create a TextField to filter the information 
   private TextField createFieldFilter(final BeanItemContainer<?> container, final Column column) {
       TextField filter = new TextField();
       filter.setImmediate(true);
       filter.addTextChangeListener(new TextChangeListener(){   
           @Override
           public void textChange(TextChangeEvent event) {
               String newValue = event.getText();
               //Remove the previous filter
               container.removeContainerFilters(column.getPropertyId());
               if (newValue != null && !newValue.isEmpty()) {
                    //Filter the information
                    container.addContainerFilter(new SimpleStringFilter(column.getPropertyId(), newValue, true, false));
                }
                recalculateColumnWidths();
           }
       });     
       return filter;
   }  
}
//在我的例子中,我创建了一个扩展网格的类。
公共类GridExample扩展了Grid{
...
//方法在网格上添加过滤器
public void setFilterGrid(BeanItemContainer beanType){
//这将创建一个HeaderRow以添加过滤器字段
HeaderRow filterRow=this.appendHeaderRow();
for(列:getColumns()){
//对于网格中的每一列
HeaderCell cellFilter=filterRow.getCell(column.getPropertyId());
//添加一个文本字段
setComponent(createFieldFilter(beanType,column));
}       
} 
//这将创建一个文本字段来过滤信息
私有TextField createFieldFilter(最终BeanItemContainer容器,最终列){
TextField filter=新建TextField();
filter.setImmediate(true);
filter.addTextChangeListener(新的TextChangeListener(){
@凌驾
公共void textChange(textchangevent事件){
字符串newValue=event.getText();
//卸下上一个过滤器
removeContainerFilters(column.getPropertyId());
if(newValue!=null&&!newValue.isEmpty()){
//过滤信息
addContainerFilter(新的SimpleStringFilter(column.getPropertyId(),newValue,true,false));
}
重新计算列宽();
}
});     
回流过滤器;
}  
}
有关更多信息,请查看此处:

在那个博客上有些东西被破坏了。重要的一点(如何真正做到这一点)不见了,取而代之的只是文字加载…@NickJ我是该博客的作者看起来我的博客的gist界面坏了,很快就会修复它