2015-02-06 3 views
0

루트 노드가 많고 각 루트 노드에 여러 수준의 하위가있는 JFace 트리 뷰가 있습니다. 예를JFace 트리 뷰에서 선택 루트 노드 가져 오기

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) 방법을 사용할 수 있습니다 - 그래서 당신은을 사용하여 트리를 이동할 수 있습니다. 당신은 어딘가에 콘텐츠 제공을 기억하거나 viewer이 트리 뷰어입니다

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

사용해야합니다

.

콘텐츠 공급자의 방법 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