是否有可能在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();
没有内置的支持,但是我们在我们的一个项目中需要它,所以我们写了它:
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
的子类中实现,但是您可以将其移至实用程序类,而只需添加传入的树实例。