如何使用swt.virtual过滤表中的输入?
在我的项目中,我有一个tableViewer
,它需要显示大约3000个项目并进行过滤。没有swt.virtual
表需要多秒钟才能显示。
因此,我实现了iLazyContentProvider
,而不是使用“ ArrayContentProvider”,但是现在我在过滤TableViewer
的元素时面临问题。
我正在编写以下代码以进行过滤,但是选择
方法根本不运行。
private static class DefaultFilterextends ViewerFilter {
private String searchText;
public void setSearchText(final String searchText) {
this.searchText = searchText;
}
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
if (this.searchText == null) {
return true;
}
return (element.toString().contains(searchText) || element.toString().equals(searchText));
}
}
下面的内容提供者,我写的
private class LazyContentProvider implements ILazyContentProvider {
private TableViewer viewer;
private List<String> elements;
public LazyContentProvider(TableViewer viewer) {
this.viewer = viewer;
}
@Override
public void dispose() {
}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
this.elements = (List<String>) newInput;
}
@Override
public void updateElement(int index) {
viewer.replace(elements.get(index), index);
}
}
是有人可以指导我如何使用SWT.Virtual在TableViewer中进行元素的过滤?
In my project, I have a TableViewer
which needs to show around 3000 items and also filter them. Without SWT.VIRTUAL
the table takes multiple seconds to display.
So, I implemented ILazyContentProvider
and not using "ArrayContentProvider" but now I am facing issues in filtering the elements of TableViewer
.
I am writing the below code for filtering but the select
method is not running at all.
private static class DefaultFilterextends ViewerFilter {
private String searchText;
public void setSearchText(final String searchText) {
this.searchText = searchText;
}
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
if (this.searchText == null) {
return true;
}
return (element.toString().contains(searchText) || element.toString().equals(searchText));
}
}
The below ContentProvider, I am writting
private class LazyContentProvider implements ILazyContentProvider {
private TableViewer viewer;
private List<String> elements;
public LazyContentProvider(TableViewer viewer) {
this.viewer = viewer;
}
@Override
public void dispose() {
}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
this.elements = (List<String>) newInput;
}
@Override
public void updateElement(int index) {
viewer.replace(elements.get(index), index);
}
}
Can someone please guide me how can I do the filteration of elements in TableViewer with SWT.VIRTUAL?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
当使用
swt.virtual
时,TableViewer不支持过滤。相反,您必须在内容提供商中进行过滤。内容提供商将需要维护过滤的元素列表。例如:
在这里,我添加了一个仅包含当前过滤元素的
filteredelements
列表,这在update> updateElement
中使用。我添加了一个
过滤器
方法,该方法更新了过滤后的元素列表。它还告诉表查看器新项目计数并刷新表。过滤器流中的
.tolist()
方法需要Java 16,适用于Java的较旧版本.Collect(collectors.tolist())
。TableViewer does not support filtering when
SWT.VIRTUAL
is used. Instead you must do the filtering in the content provider.The content provider will need to maintain a filtered list of elements. For example:
Here I have added a
filteredElements
list that contains just the current filtered elements, this is used inupdateElement
.I added a
filter
method which updates the filtered elements list. It also tells the table viewer about the new item count and refreshes the table.The
.toList()
method in the filter stream requires Java 16, for older versions of Java use.collect(Collectors.toList())
.