2017-02-22 26 views
1

У меня есть TreeViewer с поставщиком контента и ярлыков. Когда я устанавливаю вход, данные не отображаются, у меня есть только пустой вид. Что я делаю не так?TreeViewer не показывает ввод

В приведенном ниже коде показано, как я создаю TreeViwer и поставщиков. Родитель должен быть строками, а дочерние элементы являются подстроками (т. Е. Буквами) родителя.

Как создать 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); 

Поставщиками:

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

Вы используете неправильный конструктор для TreeViewer. Если у вас уже есть Tree вы должны использовать:

TreeViewer treeViewer = new TreeViewer(tree); 

(без флагов стиля).

Конструктор, который вы используете, создает второе дерево внутри первого дерева - это не работает.