【问题标题】:GWT CellTree scroll to arbitrary nodeGWT CellTree 滚动到任意节点
【发布时间】:2012-07-01 20:16:55
【问题描述】:

我正在编写某种对象浏览器,按文件夹组织。当用户选择列表中的某个文件夹时,我必须在树中展开适当的节点。 我已经实现了树扩展,树中的元素选择,但是扩展可能发生在树的可见区域之外的部分(CellTree 在 ScrollPane 上)。 所以,我确实有一个 TreeNode 的实例 - 我如何以编程方式滚动以使其可见?

【问题讨论】:

    标签: gwt


    【解决方案1】:

    目前的 API 是不可能的,但是你可以尝试一下,我还没有测试过,但应该很容易:

    1. 对于树中的每个对象渲染和不可见标记,标识该对象,如<input type="hidden" id="yourObjectId"/>
    2. 在设置 NodeInfo 等时确保您有 SelectionModel
    3. 如果您知道要滚动到哪个对象,请致电yourSelectionModel.setSelected(object,true);。这应该会展开树并显示您选择的对象。
    4. 在这个阶段你要做的是:
    Element cellTreeElement = yourCellTree.getElement();
    NodeList<Element> objectIds = cellTreeElement.getElementsByTagName("input");
    for ( int i=0;i<elementsByTagName.getLength();i++ )
    {
       Element e = objectIds .getItem( i );
       if (e.getId().equals( yourObjectId ) {
         e.scrollIntoView();
       }
    }
    

    很确定这应该可以正常工作。

    【讨论】:

    • 一些注意事项:最好滚动到某个可见元素,否则滚动(在我的情况下)会转到单元格的顶部(我在单元格的 render() 内添加标记的元素)。但也许我必须使用样式将这个元素向下移动一点。关于第 3 点 - 调用 'setSelected' 是不够的 - 相反,我必须使用我的数据模型在选定元素的路径中查找所有对象,然后使用 'tree.getRootTreeNode' 和 'rootNode.setChildOpen(...) '。诀窍是“rootNode.setChildOpen(...)”将打开的子节点作为“TreeNode”返回。再次非常感谢!
    【解决方案2】:

    另一个版本(如果你想将元素移动到 CellTree 的顶部):

        Element cellTreeElement = yourCellTree.getElement();
        NodeList<Element> objectIds = cellTreeElement.getElementsByTagName("input");
        for (int j = 0; j < objectIds.getLength(); j++) {
            Element e = objectIds.getItem(j);
            if (e.getId().equals("r" + iDistrictID)) {
                yourCellTree.getElement().getParentElement().getParentElement().setScrollTop(e.getParentElement().getParentElement().getOffsetTop());
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-13
      • 2013-10-12
      • 1970-01-01
      相关资源
      最近更新 更多