TreeViewer不显示输入

时间:2017-02-22 12:42:09

标签: java swt jface 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;
    }

}

1 个答案:

答案 0 :(得分:2)

您使用TreeViewer的错误构造函数。如果您已经拥有Tree,则必须使用:

TreeViewer treeViewer = new TreeViewer(tree);

(没有样式标志)。

您正在使用的构造函数是在第一个树中创建第二个树 - 这不起作用。