是不是很神奇?
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()); // } } } });
效果如下:
当选中上级菜单则下级菜单会自动选中:
当取消了上级菜单的选中状态,下级菜单会自动取消;
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步