我有一个带有内容和标签提供程序的 TreeViewer。当我设置输入时,数据不显示,我只有一个空白 View 。我究竟做错了什么?
在下面的代码中,我展示了如何创建 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;
}
}
最佳答案
您为 TreeViewer
使用了错误的构造函数.如果您已有 Tree
你必须使用:
TreeViewer treeViewer = new TreeViewer(tree);
(没有样式标志)。
您正在使用的构造函数在第一棵树内创建第二棵树 - 这不起作用。
关于java - TreeViewer 不显示输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42391821/