什么时候调用 filter(Viewer,TreePath,Object[]) 方法?
when is the filter(Viewer,TreePath,Object[]) method called?
我已经为我的 TreeViewer
对象创建并添加了一个新过滤器。它工作正常,但我似乎无法理解什么时候调用 filter(Viewer,TreePath,Object[])
。
所以过滤器实际上是一个class的实例,扩展了ViewerFilter
,需要实现抽象方法select。在我的例子中,select 总是 returns true 并且我通过覆盖 public Object[] filter(Viewer viewer, Object parent, Object[] elements)
.
来过滤元素
然而,当我尝试覆盖 public Object[] filter(Viewer viewer, TreePath parentPath, Object[] elements)
时,此函数根本没有被调用。
外观如下:
myTreeViewer.addFilter(new ViewerFilter()
{
@Override
public Object[] filter(Viewer viewer, TreePath parentPath, Object[] elements)
{
/* doesn't get called */
return elements;
}
@Override
public Object[] filter(Viewer viewer, Object parent, Object[] elements)
{
/* gets called normally */
return elements;
}
@Override
public boolean select(Viewer arg0, Object arg1, Object arg2)
{
// TODO Auto-generated method stub
return true;
}
});
我需要使用 TreePath
参数重写过滤方法,以便根据指定级别过滤元素。
在文档中我只能找到以下解释:
Filters the given elements for the given viewer. The input array is not modified.
The default implementation of this method calls filter(Viewer, Object, Object[]) with the parent from the path. Subclasses may override
稍后编辑
最后我找不到调用此函数的任何方法,所以我实施了一个解决方法:我在我的模型实例上创建了一个包装器,它也有一个 "parent" 字段。每当我将我的实例插入到树中时(在我的 getChildren
和 getElements
方法中),我实际上创建了我的包装器的实例并相应地设置父级。
这样,每当 hasChildren
被调用时,我都可以从当前节点导航到根节点。
查看源代码,Eclipse 'search references' 表示没有调用 filter
的 TreePath
版本。
你的 ITreeContentProvider
有一个 getParent(object)
方法可以用来遍历树。
我已经为我的 TreeViewer
对象创建并添加了一个新过滤器。它工作正常,但我似乎无法理解什么时候调用 filter(Viewer,TreePath,Object[])
。
所以过滤器实际上是一个class的实例,扩展了ViewerFilter
,需要实现抽象方法select。在我的例子中,select 总是 returns true 并且我通过覆盖 public Object[] filter(Viewer viewer, Object parent, Object[] elements)
.
然而,当我尝试覆盖 public Object[] filter(Viewer viewer, TreePath parentPath, Object[] elements)
时,此函数根本没有被调用。
外观如下:
myTreeViewer.addFilter(new ViewerFilter()
{
@Override
public Object[] filter(Viewer viewer, TreePath parentPath, Object[] elements)
{
/* doesn't get called */
return elements;
}
@Override
public Object[] filter(Viewer viewer, Object parent, Object[] elements)
{
/* gets called normally */
return elements;
}
@Override
public boolean select(Viewer arg0, Object arg1, Object arg2)
{
// TODO Auto-generated method stub
return true;
}
});
我需要使用 TreePath
参数重写过滤方法,以便根据指定级别过滤元素。
在文档中我只能找到以下解释:
Filters the given elements for the given viewer. The input array is not modified. The default implementation of this method calls filter(Viewer, Object, Object[]) with the parent from the path. Subclasses may override
稍后编辑
最后我找不到调用此函数的任何方法,所以我实施了一个解决方法:我在我的模型实例上创建了一个包装器,它也有一个 "parent" 字段。每当我将我的实例插入到树中时(在我的 getChildren
和 getElements
方法中),我实际上创建了我的包装器的实例并相应地设置父级。
这样,每当 hasChildren
被调用时,我都可以从当前节点导航到根节点。
查看源代码,Eclipse 'search references' 表示没有调用 filter
的 TreePath
版本。
你的 ITreeContentProvider
有一个 getParent(object)
方法可以用来遍历树。