java - TreeViewer 不显示输入

标签 java swt jface treeviewer

我有一个带有内容和标签提供程序的 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/

相关文章:

java - 防止将 JFace TableColumn 的大小调整为 0 宽度

java - Cassandra 自动完成不起作用

java - SWT 空表/树上的自定义行高

java - Eclipse 项目属性/首选项页面 : How to find event of opening preference page in project property window(Eclipse)

swt - FormLayout、FormData 和控件

java - 在 CoolBar 中添加自定义小部件?

java - 将 SQLite 日期整数转换为 Java 日期

java - java.util.Date 到 java.sql.Date 的转换会截断时间部分

Java:如何恢复使用 python 的 zlib 编码器压缩的字符串数据

java - SWT ScrolledComposite 手动工具 : Scroll Proportional To Mouse Movement