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);
}
}
}
}
}
}
}
}
}
}
swt CheckboxTreeViewer 全選 反選 級聯選中子節點
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.