我有一个带有内容和标签提供者的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;
}
}
答案 0 :(得分:2)
您使用TreeViewer
的错误构造函数。如果您已经拥有Tree
,则必须使用:
TreeViewer treeViewer = new TreeViewer(tree);
(没有样式标志)。
您正在使用的构造函数是在第一个树中创建第二个树 - 这不起作用。