2015-02-06 7 views
0

У меня есть вид дерева JFace, в котором есть много корневых узлов, и каждый корневой узел имеет дочерние элементы с множеством уровней. НапримерПолучение корневого узла выбора в JFace Tree View

Root 1 
    child1 
     child1.child1 
    child2 
     child2.child1 

    Root 2 
    child1 
     child1.child1 
    child2 
     child2.child1 

Если я нажимаю на любом ребенке под корнем 1 Я хочу, чтобы получить корневой узел 1, и если я нажимаю на любом ребенке под корнем 2 Я хочу, чтобы получить корневой узел 2?

Я проверил с выбором, но есть только один метод getFirstElement() Как я могу это сделать?

viewer.addDoubleClickListener(new IDoubleClickListener() { 

    @Override 
    public void doubleClick(DoubleClickEvent event) { 

    TreeViewer viewer = (TreeViewer) event.getViewer(); 

    IStructuredSelection thisSelection = (IStructuredSelection) event.getSelection(); 

    Object selectedNode = thisSelection.getFirstElement(); 

    viewer.setExpandedState(selectedNode, 
     !viewer.getExpandedState(selectedNode)); 
    } 
}); 

ответ

0

Вы можете использовать метод getParent(Object element) вашего дерева Зритель Content Provider, чтобы получить родительский элемент - так что вы можете перемещаться по дереву с помощью этого.

Вам нужно будет помнить ваш контент-провайдер где-то, или использовать

ITreeContentProvider provider = (ITreeContentProvider)viewer.getContentProvider(); 

где viewer ваш зритель дерева.

Вы несете ответственность за использование метода getParent поставщика контента.

Так что ваши классы модели данных должны быть созданы с информацией об их родителях:

class DataModelObject 
{ 
    private DataModelObject parent; 

    DataModelObject(DataModelObject parent) 
    { 
    this.parent = parent; 
    } 

    DataModelObject getParent() 
    { 
    return parent; 
    } 
} 

или просто сохранить корень:

class DataModelObject 
{ 
    private DataModelObject root; 

    DataModelObject(DataModelObject root) 
    { 
    this.root = root; 
    } 

    DataModelObject getRoot() 
    { 
    return root; 
    } 
} 
+0

Я реализовал selectionlistener и на основе выбранный элемент в дереве. Я хочу найти его корневой узел. – wearybands

+0

. Да, используйте контент-провайдера или добавьте код в классы моделей данных. У просмотра дерева нет ничего, что просто даст вам это. –

+0

Что следует добавить поставщику контента в корневой узел? – wearybands

Смежные вопросы