Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在动态更新的JFace TableViewer上添加ViewerFilter?_Java_Swt_Jface - Fatal编程技术网

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

Java 如何在动态更新的JFace TableViewer上添加ViewerFilter?,java,swt,jface,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 up

我想在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);

我是否需要删除过滤器并在modify listener中创建一个新的过滤器,还是有更好的解决方案?

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

基本上,您需要有一种方法将输入的文本传递给过滤器,在select方法中,您应该基于此文本进行过滤,在文本小部件的侦听器中,将文本传递给过滤器并在表上调用
viewer.refresh()


这个例子应该可以帮助您:

我使用tableviewer,而不是treeviewer,但我可以使用相同的原理。但最大的问题是我不在RCP应用程序中,所以我不能使用WorkbenchJob。为什么你不能在RCP中使用WorkbenchJob?这是一个API,也可以在RCP应用程序中使用。问题是:我不在RCP中!