我通過互聯網搜索,但沒有看到任何單一的職位討論這個非常有用的話題。這是我的問題。當節點的深度未知(GWT)時,如何遍歷Tree小部件?
我得到了有關於TreeItem的孩子根本&的CheckBox樹。
我希望當用戶檢查TreeItem的根檢查框時,然後檢查所有子CheckBox &的子根檢查框。
例如,看這張圖片。
我想的是,當用戶選擇「層次1」複選框,然後「等級11」 &「等級111」 &「等級112」的複選框被選中。當用戶取消選擇「級別1」複選框然後「級別11」&「級別111」&「級別112」複選框未選中。
當用戶選中「Main」後,所有的孩子(「Level 1」,「Level 11」,「Level 111」&「Level 112」,「Level 2」,「Level 21」)已經過檢查。當用戶取消選中「主」時,它將取消選中所有的孩子。
但是,當用戶選中「2級」,那麼只有「21級」進行了調查。
注:樹的深度是未知的先進。
這是數據代碼:
Tree myTree=new Tree();
TreeItem item1=new TreeItem(new CheckBox("Main"));
myTree.addItem(item1);
TreeItem item2=new TreeItem(new CheckBox("Level 1"));
item1.addItem(item2);
TreeItem item3=new TreeItem(new CheckBox("Level 11"));
item2.addItem(item3);
item3.addItem(new CheckBox("Level 111"));
item3.addItem(new CheckBox("Level 112"));
TreeItem item6=new TreeItem(new CheckBox("Level 2"));
item6.addItem(new CheckBox("Level 21"));
item1.addItem(item6);
這是我研究的代碼,但它僅變爲1個電平
Iterator<Widget> widgetsOfTree=myTree.iterator();
TreeItem myTreeItem=myTree.getItem(0);
for (int c=0; c<myTreeItem.getChildCount(); c++){
TreeItem childTreeItem=myTreeItem.getChild(c);
CheckBox myCheckBox=(CheckBox)childTreeItem.getWidget();
}
這是基於所提供的traverseTree方法附加代碼Mayank Pandya。當我單擊「Main」或「Level 1」或「Level 2」複選框時,此代碼有效,但當單擊其他複選框時它無法正常工作。例如,當點擊「Level 11」時沒有選擇任何東西。
myCheckBox.addClickHandler(new ClickHandler(){
@Override
public void onClick(ClickEvent event) {
for(int i=0; i<myTree.getItemCount(); i++){
TreeItem myTreeItem = myTree.getItem(i);
for (int c=0; c<myTreeItem.getChildCount(); c++){
TreeItem categoryTreeItem=myTreeItem.getChild(c);
CheckBox subCB=(CheckBox)categoryTreeItem.getWidget();
if(myCheckBox==subCB){
traverseTree(categoryTreeItem, myCheckBox.isChecked()) ;
}
}
}
}
});
相信很多人都在尋找這個問題&希望我的問題可以幫助很多人。
你好,非常感謝你的幫助,但是當用戶在點擊複選框那麼我們如何才能識別TreeItem此複選框屬於? – Tum
我剛剛編輯了我的問題以包含基於您的traverseTree方法的代碼。請看看有什麼不對嗎? – Tum
我認爲,我們需要使用一些遞歸的解決方案來識別TreeItem一個複選框屬於 – Tum