Checkbox GXT Treepanel复选框层叠无法从叶子向上工作

Checkbox GXT Treepanel复选框层叠无法从叶子向上工作,checkbox,tree,cascade,gxt,Checkbox,Tree,Cascade,Gxt,我正在使用带有复选框的GXT TreePanel,并注意到似乎没有一种方法来配置它,以便检查状态正确地从叶子级联到父节点……例如: foo bar baz Initial state: nothing checked. Input: check bar, then baz. Expected result: foo gets checked to reflect that all its child nodes are checked. Actual result: foo rem

我正在使用带有复选框的GXT TreePanel,并注意到似乎没有一种方法来配置它,以便检查状态正确地从叶子级联到父节点……例如:

foo bar baz Initial state: nothing checked. Input: check bar, then baz. Expected result: foo gets checked to reflect that all its child nodes are checked. Actual result: foo remains unchecked. 福 酒吧 巴兹 初始状态:未检查任何内容。 输入:勾选栏,然后是baz。 预期结果:检查foo以反映其所有子节点都已检查。 实际结果:foo保持未选中状态。
您可以手动检查是否已检查所有子项,然后再次手动设置其父项的状态。代码如下所示:

tree.addCheckListener(new CheckChangedListener<ModelData>() {
  public void checkChanged(CheckChangedEvent<ModelData> event) {
    ModelData lastParent = null;
    for (ModelData item : tree.getCheckedSelection()) {
        BaseTreeModel btm = (BaseTreeModel)item;
        if (lastParent != null && btm.getParent() == lastParent) {
            continue;
        }
        boolean allChildrenChecked = true;
        for (ModelData modelData : btm.getParent().getChildren()) {
            if (!tree.isChecked(modelData)) {
                allChildrenChecked = false;
                break;
            }
        }
        tree.setChecked(btm.getParent(), allChildrenChecked);
        lastParent = btm.getParent();
    }
  }
});
tree.addCheckListener(新的CheckChangedListener(){
公共无效checkChanged(CheckChangedEvent事件){
ModelData lastParent=null;
对于(ModelData项:tree.getCheckedSelection()){
BaseTreeModel btm=(BaseTreeModel)项;
if(lastParent!=null&&btm.getParent()==lastParent){
继续;
}
布尔值allChildrenChecked=true;
对于(ModelData ModelData:btm.getParent().getChildren()){
如果(!tree.isChecked(modelData)){
allChildrenChecked=false;
打破
}
}
setChecked(btm.getParent(),allChildrenChecked);
lastParent=btm.getParent();
}
}
});
使用
setCheckStyle(CheckCascade.CHILDREN)方法

它会帮助你的