gwt实现相邻树条目(TreeItem)的自动收缩
gwt showcase中的树条目,无法实现自动的收缩相邻的树条目。比如:
选择了Basic Text,可是上面的Lists and Menus的树条目还是打开的。如果项目的树很长,可能会影响用户体验。
因此,实现了一个支持自动收缩的方案。
如果选择用户管理里面的条目,则系统管理将自动收缩。
代码主要是对Tree增加SelectionHandler,即当点击条目时的监听器。
view.addSelectionHandler(new SelectionHandler<TreeItem>() {
@Override
public void onSelection(SelectionEvent<TreeItem> event) {
TreeItem item = event.getSelectedItem();if (item.getParentItem() != null) {
Tree tree = item.getTree();
for (Iterator<TreeItem> iterator = tree.treeItemIterator(); iterator
.hasNext();) {
TreeItem i = iterator.next();
if (i.getParentItem() == null) {
if (i.getChildIndex(item) == -1) {
i.setState(false, false);
}
}
}
}
}
});
基本思路是,点击树的任意条目,将触发onSelection方法。首先判断是否是顶级节点,如果不是,迭代树的所有节点,如果该节点是顶级节点,再判断点击的节点是否是它的子节点,如果不是,则收缩该顶级节点。
这个方法的局限性是如果比如日志节点再有子节点,比如系统日志,将出现错误,点击系统日志节点,系统管理节点将收缩,因为(i.getChildIndex(item)方法只能判断一级子节点,不能判断子节点的子节点。
但是这个方案已经满足当前需求,因此不再进一步完善了。
源代码见:
这篇文章上的评论的 RSS feed TrackBack URI