只有在Swing中选择所有孩子时才选择父节点
我正在开发一个IntelliJ插件,将弹出对话框以检查CheckboxTree
中的值。对于我下面低于Q &答:只有在Swing中选择所有孩子时才选择父节点
Java Swing: Need a good quality developed JTree with checkboxes
但是当我点击一个子节点上也越来越选定父节点。但是我只想选择父节点时,只有当它的所有孩子被选中,否则未选中。
只需添加该代码
注释代码象下面这样updatePredecessorsWithCheckMode
功能,并添加代码之后的for循环
// If at least one child is selected, selecting also the parent
// if (childCheckedNode.isSelected) {
// parentCheckedNode.isSelected = true;
// }
}
//check the parent if all children are selected
if (parentCheckedNode.allChildrenSelected) {
parentCheckedNode.isSelected = true;
}
全功能参考
// When a node is checked/unchecked, updating the states of the predecessors
protected void updatePredecessorsWithCheckMode(TreePath tp, boolean check) {
TreePath parentPath = tp.getParentPath();
// If it is the root, stop the recursive calls and return
if (parentPath == null) {
return;
}
CheckedNode parentCheckedNode = nodesCheckingState.get(parentPath);
DefaultMutableTreeNode parentNode = (DefaultMutableTreeNode) parentPath.getLastPathComponent();
parentCheckedNode.allChildrenSelected = true;
parentCheckedNode.isSelected = false;
for (int i = 0; i < parentNode.getChildCount(); i++) {
TreePath childPath = parentPath.pathByAddingChild(parentNode.getChildAt(i));
CheckedNode childCheckedNode = nodesCheckingState.get(childPath);
// It is enough that even one subtree is not fully selected
// to determine that the parent is not fully selected
if (!childCheckedNode.allChildrenSelected) {
parentCheckedNode.allChildrenSelected = false;
}
// If at least one child is selected, selecting also the parent
// if (childCheckedNode.isSelected) {
// parentCheckedNode.isSelected = true;
// }
}
//check the parent if all children are selected
if (parentCheckedNode.allChildrenSelected) {
parentCheckedNode.isSelected = true;
}
if (parentCheckedNode.isSelected) {
checkedPaths.add(parentPath);
} else {
checkedPaths.remove(parentPath);
}
// Go to upper predecessor
updatePredecessorsWithCheckMode(parentPath, check);
}
@ Madhan:非常感谢您的帮助......它正在运行absolu Tely fine .. :) –
@Mashan需要更多帮助。复选框的字符串长度很大。但它只显示2个字符。我使用下面的代码chechBoxTree.setLayout(new BoxLayout(chechBoxTree,BoxLayout.PAGE_AXIS))更改布局; chechBoxTree.setSize(800,300);但它不反映在UI中。请帮助。 –
@ user667505我找不到你。如果文字太大,它只显示两个字符,后面跟着两个点或类似的东西。如果是这样的话,尝试'((DefaultTreeModel)tree.getModel())。 '。更多地解释问题或将它作为一个不同的问题发布 – Madhan
您可以添加到addCheckChangeEventListener - >如果不是所有的孩子都选择了“取消选中父节点” –