能否让选中的树节点显示在用户可见区域?

当树节点比较多(自动出现垂直滚动条)时,用代码选中一个节点(在当前显示区域外),是否有方法可以控制滚动条让选中的节点出现在可见区域中?

你说的是这样 的效果吗?因为 CUBA 底层是 vaadin,这种操作查 vaadin 文档必查 cuba 文档好。CUBA 的 UI 通过 unwrap 就可以拿到 vaadin 的 UI 实例。
本质上 CUBA 的 UI 仅仅是对 Vaadin 组件的封装,但是它并没有代理所有功能

1 个赞

多谢!实现了,代码如下:

public <T> boolean scrollTo(CubaTree<T> tree,T item , ScrollDestination destination) {
        HierarchicalDataCommunicator<T> dataCommunicator = tree.getCompositionRoot().getDataCommunicator();
        Method getHierarchyMapper = null;
        try {
            getHierarchyMapper = HierarchicalDataCommunicator.class.getDeclaredMethod("getHierarchyMapper");
            getHierarchyMapper.setAccessible(true);
            HierarchyMapper<T, ?> mapper = (HierarchyMapper) getHierarchyMapper.invoke(dataCommunicator);
            int row= mapper.getIndexOf(item).get();
            if(row>=0) {
                tree.scrollTo(row, destination);
                return true;
            }
        } catch (Exception e) {

        }
        return false;
    }
1 个赞

得到某一个component 的实例以后也可以这样

import com.vaadin.ui.UI;
UI.getCurrent().scrollIntoView(component.unwrap(com.vaadin.ui.Component.class));