2011-11-02 32 views
0

我正在編寫某種對象瀏覽器,用文件夾組織。當用戶選擇列表中的某個文件夾時,我必須在樹中展開適當的節點。 我已經在樹中實現了樹擴展,元素選擇,但BUT擴展可能發生在超出可見區域的樹的一部分(CellTree在ScrollPane上)。 因此,我確實有一個TreeNode的實例 - 我如何以編程方式滾動以使其可見?GWT CellTree滾動到任意節點

回答

2

這是不可能的,目前的API,但你可以試試,我沒有測試過這一點,但應該是很容易:

  1. 對於樹中的每個對象渲染和無形的標籤,標識這對象,像一個<input type="hidden" id="yourObjectId"/>
  2. 確保你有一個SelectionModel設置,當你的nodeinfo等
  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(); 
    } 
} 

很肯定這應該只是罰款。

+0

不錯,謝謝! – sab

+0

一些註釋: 最好是滾動到一些可見的元素,否則滾動(在我的情況下)到單元格的頂部(我在元素的render()中添加標記的元素)。但也許我必須使用樣式將這個元素向下移動到底部。 並且關於第3點 - 僅僅調用'setSelected'是不夠的 - 相反,我必須使用我的數據模型找到選定元素路徑中的所有對象,然後使用 'tree.getRootTreeNode'和'rootNode.setChildOpen(。 ..)」。訣竅是'rootNode.setChildOpen(...)'返回打開的孩子作爲'TreeNode'。 非常感謝! – sab

0

另一個版本(如果你想的元素移動到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()); 
     } 
    }