SWT的CheckBoxTreeView的上级菜单与下级菜单的选中的实现

是不是很神奇?




treeViewer.addCheckStateListener(new ICheckStateListener() {
            
            @Override
            public void checkStateChanged(CheckStateChangedEvent event) {
                // TODO Auto-generated method stub
                if (event.getChecked()) {  
                    CheckboxTreeViewer viewer = (CheckboxTreeViewer) event.getSource();  
                    //选中:设置下级菜单选中  
                    viewer.setSubtreeChecked(event.getElement(), true);  
                    //选中:如果是子集菜单,且同级菜单全是选中的时候设置parent选中  
                    //同样如果此时parent所在的同级菜单全选中做相应的迭代处理  
                    //TODO:获取所有选中的项,比较绝对路径  
              
                } else {  
                    CheckboxTreeViewer viewer = (CheckboxTreeViewer) event.getSource();  
                    //不选中:下级目录菜单全不选中  
                    Layer file = (Layer) event.getElement();  
                    viewer.setSubtreeChecked(file, false);  
//                    //不选中:如果父级菜单是选中不能设置为选中  
//                    Layer parent = file.getParentFile();  
//                    //这里需要注意如果是顶级菜单不再迭代设置,否则将会空指针  
//                    if (parent.exists() && !parent.getAbsolutePath().equals(projectRoot)) {  
//                        setParentUnchecked(viewer, file.getParentFile());  
//                }
                }  
            }
        });

效果如下:

当选中上级菜单则下级菜单会自动选中:

当取消了上级菜单的选中状态,下级菜单会自动取消;

猜你喜欢

转载自wjy320.iteye.com/blog/1999896