CodenameOne展开完整的树

问题描述 投票:1回答:1

是否有可能在codenameone中扩展完整的Tree?

我尝试了以下操作,但仅扩展了f1中的叶子:

    Form hi = new Form("RT", new LayeredLayout());

    String[] f1 = { "F1a" , "F2"};
    String[] f2 = { "F1b" };
    String[][] f3 = { { "M1" }, { "P1 " } };
    Tree tr = new Tree(new InhaltStrings(f1, f2, f3)) {
        @Override
        protected String childToDisplayLabel(Object child) {
            return child.toString();
        }
    };
    hi.addShowListener(e -> {
        for (String l1 : f1) {
            tr.expandPath(null, l1);
        }
        for (String l2 : f2) {
            tr.expandPath(null, l2);
        }
        for (String[] la : f3) {
            for (String l3 : la) {
                tr.expandPath(null, l3);
            }
        }
    });

    hi.show();
java codenameone
1个回答
0
投票

没有内置的支持,但是我们在我们的一个项目中需要它,所以我们写了它:

public void expand() {
    Display.getInstance().callSerially(() -> {
        Object current = null;
        Vector c = getModel().getChildren(current);
        if (c != null) {
            for (Object o : c) {
                recurseExpand(o);
            }
        }
        revalidate();
    });
}

private void recurseExpand(Object... path) {
    getAnimationManager().flushAnimation(() -> {
        expandPath(false, path);
        if (getModel().isLeaf(path[path.length - 1])) {
            return;
        }
        Vector ch = getModel().getChildren(path[path.length - 1]);
        if (ch != null) {
            Object[] arr = new Object[path.length + 1];
            for (int iter = 1; iter < path.length; iter++) {
                arr[iter] = path[iter];
            }
            for (Object o : ch) {
                arr[path.length] = o;
                recurseExpand(arr);
            }
        }
    });
}

此代码在Tree的子类中实现,但是您可以将其移至实用程序类,而只需添加传入的树实例。

© www.soinside.com 2019 - 2024. All rights reserved.