/**
* 设置节点及其父节点的选中状态
* @param item 父节点
* @param checked 当前节点的选中状态
* @param grayed 当前节点的半选状态
*/
static void checkPath(TreeItem item, boolean checked, boolean grayed) {
if (item == null) return;
if (grayed) {
checked = true;
} else {
int index = 0;
TreeItem[] items = item.getItems();
while (index < items.length) {
TreeItem child = items[index];
// 如果有子节点是不完全选中或子节点的选中状态不一致,那么此节点也是不完全选中
if (child.getGrayed() || checked != child.getChecked()) {
checked = grayed = true;
break;
}
index++;
}
}
item.setChecked(checked);
item.setGrayed(grayed);
checkPath(item.getParentItem(), checked, grayed);
}
/**
* 设置节点及其子节点的选中状态
* @param item 当前节点
* @param checked 当前节点的选中状态
*/
static void checkItems(TreeItem item, boolean checked) {
item.setGrayed(false);
item.setChecked(checked);
TreeItem[] items = item.getItems();
for (int i = 0; i < items.length; i++) {
checkItems(items[i], checked);
}
}