2012-11-28 2 views
2

ITreeContentProvider을 구현하고 사용자 정의 모델은 Vogella Tutorial JFace이고 카테고리는 Todos 및 Todos가 클래스의 목록으로 카테고리의 하위 항목으로 저장됩니다. 범주. 나는 이클립스 대화 상자 CheckedTreeSelectionDialog을 사용하고 있으며 어떤 트리 대화 상자와도 같아야하고지도에서 선택된 요소를 가져올 수 있도록 확장했지만 어떤 이유로 든 레벨 1의 treeitem을 얻을 수 있지만 자녀는 할 수 없다. 이유를 이해하십시오.TreeViewer 대화 상자 Java eclipse does not는 트리 항목 children을 제공합니다

public void createMapOfCheckedItems() { 
    mapOfCheckedElements = new HashMap<Object, List<Object>>(); 
    for (TreeItem level1 : getTreeViewer().getTree().getItems()) { 
    if (level1.getChecked()) { 
     List<Object> checkedChildren = new ArrayList<Object>(); 
     for (TreeItem level2 : level1.getItems()) { 
       if (level2.getChecked()) { 
        checkedChildren.add(level2.getData()); 
       } 
      } 
      mapOfCheckedElements.put(level1.getData(), checkedChildren); 
     } 
    } 
} 

코드는 위이지만 level1.getItems() 빈 treeitem을 반환하지만 선택 대화 상자가 올바르게 부모와 어린이를 보여줍니다.

+0

어떻게 당신이 특정 키의 아이들을 액세스합니까 :

그래서, 당신의 코드는 같은 모양해야합니까? mapOfCheckedElements.get (level1)을 사용합니까? 어쩌면 treeitem을 데이터가 아닌 HashMap에 직접 넣어야합니다. – GGrec

+0

뷰어는 어떻게 만듭니 까? – Behnil

+0

'getTreeViewer()'메소드의 내용을 게시하십시오. – tkotisis

답변

2

나는이를 발견 TreeItem#getItems() API Javadoc를 읽기 :

수신기의 직접적인 항목 자녀 TreeItems의 (비어) 배열을 돌려줍니다. 참고 : 수신기의 항목 목록을 유지하기 위해 수신기에서 사용하는 실제 구조가 아니므로 배열을 수정해도 수신기에는 영향을주지 않습니다. SWT를 API에 대한

내 지식은 너무 광범위 아니지만, 내 생각은 시청자가 모든 노드에 대한 상태를 mantain하는 suposed되는 것과 TreeViewer#getItems(org.eclipse.swt.widgets.Item) 방법을 사용하여 문제를 해결할 수 있다는 것입니다.

if (level1.getChecked()) { 
     List<Object> checkedChildren = new ArrayList<Object>(); 
     for (Item level2 : getTreeViewer().getItems(level1)) { 
      if (((TreeItem)level2).getChecked()) { 
       checkedChildren.add(level2.getData()); 
      } 
     } 
     mapOfCheckedElements.put(level1.getData(), checkedChildren); 
}