我使用了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
答案 0 :(得分:0)
如果您致电setCheckedElements
,则必须在指定的阵列中包含应检查的所有内容。
您似乎正在创建一组要在树中运行的新对象,因此您必须确定需要检查哪些新项目。
您可以调用checkboxTreeViewer.getCheckedElements()
来获取旧的已检查元素(在设置新输入之前执行此操作)。这可以帮助您确定需要检查哪些新元素。