Может ли TreeViewer применять разные фильтры к одним и тем же данным?

У меня есть древовидная структура, которая добавляется к 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 является то, что он показывает строки для всех родительских узлов. Я не хочу, чтобы родительские узлы были видны, и я не хочу быть в состоянии развернуть узел, который я хочу отобразить. Есть ли способ удалить / скрыть эти строки?

По сути, моя проблема выглядит очень похоже (визуально) на изображение, показанное в этом посте: Скрытие пустых родителей - TreeViewer JFace

Я не могу использовать FilteredTree так как я уже использую XViewer и мне не нужно поле для ввода текста.

Я пытался поиграть с XViewerLabelProvider, но он по-прежнему возвращает пустые строки дерева для узлов, которые меня не интересуют.

Какие-либо предложения? Спасибо!

0 ответов

Другие вопросы по тегам