如何在动态更新的JFace TableViewer上添加ViewerFilter?

时间:2011-05-23 09:20:06

标签: java swt jface

我想在SWT / JFace应用程序中添加一个搜索功能,当用户在搜索文本字段中输入文本时,该功能会过滤TableViewer。

final Text filterText = new Text(parent, SWT.NONE);
filterText.addModifyListener(new ModifyListener() {
    @Override
    public void modifyText(ModifyEvent arg0) {
        //TODO how to update the viewer filter with the new text ?
    }
});

TableViewer tableViewer = new TableViewer(...);

ViewerFilter filterViewer = new ViewerFilter() {
    @Override
    public boolean select(Viewer viewer, Object parentElement, Object element) {
        if (filterText.getText() == "") {
            return true;
        }
        //do my stuff to know if element need to be filtered or not
        return false;
    }
};
tableViewer.addFilter(filterViewer);

我是否需要删除过滤器并在修改侦听器中创建一个新过滤器,或者是否有更好的解决方案?

2 个答案:

答案 0 :(得分:4)

基本上,您需要有一种方法可以将输入的文本传递给过滤器,在您选择的方法中,您应该根据此文本进行过滤,并在文本小部件的侦听器中将文本传递给过滤器并调用{{1}在你的桌子上。

此示例可以帮助您:http://www.vogella.com/tutorials/EclipseJFaceTableAdvanced/article.html#jfacetable_filter

答案 1 :(得分:0)

org.eclipse.ui.dialogs.FilteredTree专门用于此目的。为什么你不能使用它?