首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >setAutoExpandLevel不为TreeViewer工作

setAutoExpandLevel不为TreeViewer工作
EN

Stack Overflow用户
提问于 2013-11-14 07:31:20
回答 1查看 228关注 0票数 0

我创建了TreeViewer,并为树设置了setAutoExapandLevel

代码语言:javascript
复制
treeViewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
treeViewer.setContentProvider(new TreeContentProvider());
treeViewer.setLabelProvider(new TreeLabelProvider());
treeViewer.setAutoExpandLevel(3);
treeViewer.setInput(new Model());

树不是自动展开的问题。

你知道它为什么不起作用吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-14 08:25:37

您确定在调用setInput()时模型包含所有数据吗?

internalExpandToLevel(Widget widget, int level) (发生扩展的地方)在inputChanged(Object input, Object oldInput)上被调用。如果在调用setInput时模型为空,则不会展开任何节点。即使您稍后添加节点并调用刷新。

为了证明这一点,我将我的片段从another question的答案中删除。

按原样运行这段代码,然后使用初始化为emptytrue字段运行它。你会看到不同之处。

代码语言:javascript
复制
static boolean empty = false;

public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());

    TreeViewer treeViewer = new TreeViewer(shell, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
    treeViewer.setContentProvider(new DummyContentProvider());
    treeViewer.setAutoExpandLevel(3);
    treeViewer.setInput("root");

    empty = true;
    treeViewer.refresh();

    shell.setSize(200, 200);
    shell.open();
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
    display.dispose();
}

private static class DummyContentProvider implements ITreeContentProvider {

    @Override
    public Object[] getElements(Object inputElement) {
        return this.getChildren(inputElement);
    }

    @Override
    public Object[] getChildren(Object parentElement) {
        if (!empty) {
            return new Object[0];
        }
        switch ((String) parentElement) {
            case "root":
                return new String[]{"a", "b"};
            case "a":
                return new String[]{"1"};
            case "b":
                return new Object[]{"1", "2"};
            case "1":
                return new Object[]{"x", "y"};
            default:
                return new String[0];
        }
    }

    @Override
    public Object getParent(Object element) {
        return null;
    }

    @Override
    public boolean hasChildren(Object element) {
        return this.getChildren(element).length > 0;
    }

    @Override
    public void dispose() {
    }

    @Override
    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19971998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档