2017-02-22 5 views
1

콘텐츠 및 레이블 공급자가있는 TreeViewer가 있습니다. 입력을 설정하면 데이터가 표시되지 않고 빈 화면 만 표시됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?TreeViewer가 입력을 표시하지 않습니다.

아래 코드에서는 TreeViwer 및 공급자를 만드는 방법을 보여줍니다. 부모는 문자열이어야하며 하위 요소는 부모의 하위 문자열 (즉, 문자)입니다.

Tree tree = new Tree(top, SWT.CHECK | SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER); 

    tree.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true)); 

    TreeViewer treeViewer = new TreeViewer(tree, SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER); 

    treeViewer.setContentProvider(new TestContentProvider()); 
    treeViewer.setLabelProvider(new TestLabelProvider()); 

    List<String> input = new ArrayList<String>(); 

    input.add("abc"); 
    input.add("test"); 
    treeViewer.setInput(input); 

제공자 : 당신은 TreeViewer에 대한 잘못된 생성자를 사용하는

public class TestLabelProvider extends LabelProvider { 

    @Override 
    public String getText(Object element) { 
     if (element instanceof String) { 
      return ((String) element); 
     } 
     return "none"; 
    } 
} 




public class TestContentProvider implements ITreeContentProvider { 

    private static final Object[] EMPTY_ARRAY = new Object[0]; 

    @Override 
    public Object[] getElements(Object inputElement) { 
     if (inputElement instanceof List) { 
      return ((List<String>) inputElement).toArray(); 
     } else { 
      return EMPTY_ARRAY; 
     } 
    } 

    @Override 
    public boolean hasChildren(Object element) { 
     if (element instanceof String) { 
      return true; 
     } 
     return false; 
    } 

    @Override 
    public Object[] getChildren(Object parentElement) { 
     if (parentElement instanceof String) { 
      String s = (String) parentElement; 
      return s.split(""); 
     } 
     return EMPTY_ARRAY; 
    } 

    @Override 
    public void dispose() { 
    } 

    @Override 
    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { 
    } 

    @Override 
    public Object getParent(Object element) { 
     return null; 
    } 

} 

답변

2

은 어떻게 TreeViwer을 만들 수 있습니다. 이미 Tree가있는 경우 사용합니다

TreeViewer treeViewer = new TreeViewer(tree); 

(NO 스타일 플래그).

사용중인 생성자가 첫 번째 트리 안에 두 번째 트리를 만드는 중입니다. 작동하지 않습니다.