如何在动态更新的 JFace TableViewer 上添加 ViewerFilter?
我想在 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);
我是否需要删除过滤器并在修改侦听器中创建一个新过滤器,或者是否有更好的解决方案?
I want to add in a SWT/JFace application a search functionality that filter a TableViewer as the user enter text in the search text field.
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);
Do I need to remove the filter and create a new one in the modify listener or is there a better solution?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
基本上,您需要有一种方法将输入的文本传递到过滤器,在您的 select 方法中,您应该根据此文本进行过滤,并在文本小部件的侦听器中将文本传递到过滤器并调用 viewer.refresh( ) 在你的桌子上。
此示例应该对您有帮助: http://www.vogella.com/tutorials/EclipseJFaceTableAdvanced /article.html#jfacetable_filter
Basically, you need to have a way of passing the entered text to the filter, in your select method you should filter based on this text, and in your text widget's listener pass the text to the filter and call
viewer.refresh()
on your table.This example should help you: http://www.vogella.com/tutorials/EclipseJFaceTableAdvanced/article.html#jfacetable_filter
org.eclipse.ui.dialogs.FilteredTree 专门用于此目的。为什么你不能用它?
org.eclipse.ui.dialogs.FilteredTree
is specifically available for that purpose. Why can't you use that?