Java 如何在动态更新的JFace TableViewer上添加ViewerFilter?
我想在SWT/JFace应用程序中添加一个搜索功能,当用户在搜索文本字段中输入文本时,该功能会过滤TableViewerJava 如何在动态更新的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
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中!