CheckboxTreeviewer先前在重新加载后设置了已检查的元素

时间:2016-12-21 11:18:43

标签: eclipse-rcp jface treeviewer

我使用了JFace CheckboxTreeviewer并添加了ICheckStateListener来获取已检查元素的结果。 代码如下

    private HashSet<Object> checkElement=new HashSet<Object>();
checkboxTreeViewer.addCheckStateListener(new ICheckStateListener() {

        @Override
        public void checkStateChanged(CheckStateChangedEvent event) {
            String childNode=null;
            String rootNode=null;
            Object changed = event.getElement();
            if(changed instanceof ChildFacetNodeVo){
                checkElement.add(changed);
                ChildFacetNodeVo childFacetNodeVo=(ChildFacetNodeVo)changed;                    
                childNode=childFacetNodeVo.getLabelFacet();
                rootNode=childFacetNodeVo.getParent();
               //here to get a new result after element checked and put new result to checkboxtreeviewer
                List<RootFacetNodeVo> facetNodeVos=createFacetFilter(rootNode,childNode);
                if(facetNodeVos!=null){        

                    checkboxTreeViewer.setInput(facetNodeVos);                                
                    checkboxTreeViewer.expandToLevel(3);
                   checkboxTreeViewer.setCheckedElements(checkElement.toArray());
                }
            }                
        }
    });

现在我需要的是当我检查新元素时,先前检查过的元素不应该被取消选中。 当我在CheckboxTreeviewer中设置新输入时,看不到任何内容。 那么我如何在CheckboxTreeviewer中设置prevly checked元素。 例如

p1
  -----A1 - previous checked
  -----A2
  -----A3
  -----A4
  -----A5
p1
  -----A6
  -----A7
  -----A8 - previous checked
  -----A8
   -----A9
p1
  -----A10
  -----A11

1 个答案:

答案 0 :(得分:0)

如果您致电setCheckedElements,则必须在指定的阵列中包含应检查的所有内容。

您似乎正在创建一组要在树中运行的新对象,因此您必须确定需要检查哪些新项目。

您可以调用checkboxTreeViewer.getCheckedElements()来获取旧的已检查元素(在设置新输入之前执行此操作)。这可以帮助您确定需要检查哪些新元素。