gwt实现相邻树条目(TreeItem)的自动收缩

gwt showcase中的树条目,无法实现自动的收缩相邻的树条目。比如:

image

选择了Basic Text,可是上面的Lists and Menus的树条目还是打开的。如果项目的树很长,可能会影响用户体验。

因此,实现了一个支持自动收缩的方案。

image

如果选择用户管理里面的条目,则系统管理将自动收缩。

代码主要是对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)方法只能判断一级子节点,不能判断子节点的子节点。

但是这个方案已经满足当前需求,因此不再进一步完善了。

源代码见:

http://easymorse.googlecode.com/svn/tags/mis-0.1.0/

PDF格式打印機    发送文章为PDF   

这篇文章上的评论的 RSS feed TrackBack URI

Leave a Reply