swt CheckboxTreeViewer 全選 反選 級聯選中子節點

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();  
					                    //不選中:下級目錄菜單全不選中  
					                    viewer.setSubtreeChecked(event.getElement(), false);  
		//			                    //不選中:如果父級菜單是選中不能設置爲選中  
		//			                    Layer parent = file.getParentFile();  
		//			                    //這裏需要注意如果是頂級菜單不再迭代設置,否則將會空指針  
		//			                    if (parent.exists() && !parent.getAbsolutePath().equals(projectRoot)) {  
		//			                        setParentUnchecked(viewer, file.getParentFile());  
		//			                }
					                }  
			            	}
				         }
			        });
	/**
		 * 全部選中
		 */
		
		protected void selectall() {
			treeViewer.expandAll();
			TreeItem[] items = treeViewer.getTree().getItems();
			if (items != null && items.length > 0) {
				for (int i = 0; i < items.length; i++) {
					items[i].setChecked(true);
					TreeItem[] itemssub = items[i].getItems();
					if(itemssub!=null &&itemssub.length >0){
						for(int j = 0 ; j < itemssub.length ; j++){
							itemssub[j].setChecked(true);
							TreeItem[] itemssubsub = tree.getItem(i).getItem(j).getItems();
							if(itemssubsub != null && itemssubsub.length>0){
								for(int x = 0 ; x < itemssubsub.length ; x++){
									itemssubsub[x].setChecked(true);
									TreeItem[] itemssubsubsub = tree.getItem(i).getItem(j).getItem(x).getItems();
									if(itemssubsubsub != null && itemssubsubsub.length>0){
										for(int y = 0 ; y < itemssubsubsub.length ; y++){
											itemssubsubsub[y].setChecked(true);
										}
									}
								}
							}
						}
					}
				}
			}
		}
		/**
		 * 反選
		 */
		protected void  reverseSelection(){
			TreeItem[] items = treeViewer.getTree().getItems();
			if (items != null && items.length > 0) {
					for (int i = 0; i < items.length; i++) {
						if (items[i].getChecked()) {
							items[i].setChecked(false);
						} else {
							items[i].setChecked(true);
						}
						TreeItem[] itemssub = items[i].getItems();
						if(itemssub!=null &&itemssub.length >0){
							for(int j = 0 ; j < itemssub.length ; j++){
								if (itemssub[j].getChecked()) {
									itemssub[j].setChecked(false);
								} else {
									itemssub[j].setChecked(true);
								}
								TreeItem[] itemssubsub = tree.getItem(i).getItem(j).getItems();
								if(itemssubsub != null && itemssubsub.length>0){
									for(int x = 0 ; x < itemssubsub.length ; x++){
										if (itemssubsub[x].getChecked()) {
											itemssubsub[x].setChecked(false);
										} else {
											itemssubsub[x].setChecked(true);
										}
										TreeItem[] itemssubsubsub = tree.getItem(i).getItem(j).getItem(x).getItems();
										if(itemssubsubsub != null && itemssubsubsub.length>0){
											for(int y = 0 ; y < itemssubsubsub.length ; y++){
												if (itemssubsubsub[y].getChecked()) {
													itemssubsubsub[y].setChecked(false);
												} else {
													itemssubsubsub[y].setChecked(true);
												}
											}
										}
									}
								}
							}
				}
		}
					}
		}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章