TreeViewer可以对同一数据应用不同的过滤器吗?

时间:2015-11-25 15:34:55

标签: java jface treeviewer nebula

我有一个添加到XViewer的树结构(XViewer本质上是一个增强的TreeViewer)。我想使用两个不同的视图显示数据(取决于用户点击的单选按钮)。如果用户选择第一个视图,他们将以树形式查看数据。如果用户选择第二个视图,他们将看到类似于表的数据的扁平化版本。

是否可以使用ViewerFilter(以及可能的其他类型的过滤)来动态切换数据的表示?或者,我是否必须跟踪不同的数据结构并在用户单击单选按钮时手动切换它们?例如:维持setInput(tree)setInput(List)?我宁愿只维护一个数据结构作为输入,并以不同的方式呈现它。

下面显示了一个简单的例子。

public class Foo{
 int myIntOne;
 String myStringOne;
 String myStringTwo;
 public Foo(int i, String s1, String s2){
    myIntOne = i;
    myStringOne = s1;    
    myStringTwo = s2;
 }
}

public class Example extends XViewer{
 public void someMethod(){
    //Create some fake data
    Foo a = new Foo(1,"John","Doe");
    Foo a1 = new Foo(1,"Mike","Doe");
    Foo b = new Foo(2,"Steve","Smith");
    Foo c = new Foo(3,"Roger","Jones");

    // Combine them into a tree structure
    // Not shown since outside scope of question

    setInput(treeStructure);
 }
}

========
View one
========
All
-----
Doe
 -John
 -Mike
Smith
 - Steve
Jones
 - Roger

========
View Two
========
FName | LName | Number
----------------------
John  | Doe   | 1
Mike  | Doe   | 1
Steve | Smith | 2
Roger | Jones | 3

使用ViewerFilter的问题是它显示所有父节点的行。我不希望父节点可见,我不希望能够钻入我想要显示的节点。有没有办法删除/隐藏这些行?

基本上,我的问题看起来与本文中显示的图片非常相似(视觉上):  Hiding empty parents - JFace's TreeViewer

我无法使用FilteredTree,因为我已经使用了XViewer,而且我不需要文本输入字段。

我尝试使用XViewerLabelProvider,但它仍然为我不感兴趣的节点返回空白树行。

有什么建议吗? 谢谢!

0 个答案:

没有答案