以编程方式选择复选框节点的问题

时间:2012-02-03 05:02:55

标签: java swing checkbox jtree

我在树结构中列出了一个复选框组。树与一个向量相连,该向量存储树中复选框的状态。我有按钮来选择所有复选框,而其他按钮则选择相应的复选框。从下图中,您可以想象UI。

enter image description here

for (CheckBoxNode Node : CheckBoxNodeTree.checkBoxRows) {
if(Node.isSelected()){
Node.setSelected(!Node.isSelected());
        }

For Select All使用的代码是:

TreeModel model = TREE.getModel();
        TreeNode  rootofTree = (TreeNode) model.getRoot();

        Enumeration<TreeNode> enumeratorForTree =                ((DefaultMutableTreeNode)rootofTree).breadthFirstEnumeration();
        while (enumeratorForTree.hasMoreElements()) {
         TreeNode child = enumeratorForTree.nextElement();
         Object currentNode = ((DefaultMutableTreeNode) child).getUserObject();
         if(currentNode instanceof CheckBoxNode) {

                ((CheckBoxNode) currentNode).setSelected(true);
         }
        }
        for (CheckBoxNode Node: CheckBoxNodeTree.checkBoxRows) 
        {
        Node.setSelected(true);
        }

我现在面临的问题是,在单击相应按钮时,复选框状态会发生变化,但在单击“全选”按钮后,我可以看到节点被检查,但在此之后,如果我尝试选择使用相应按钮的感应节点,我无法在树上看到结果。 任何人都可以帮助我提出你的建议。感谢提前回复。

2 个答案:

答案 0 :(得分:2)

看起来像是一个通知问题 - 您正在更改节点状态,而模型不知​​道它。假设您的模型是DefaultTreeModel,请在更改选择后调用model.nodeChanged:

currentNode.setSelected(newState);
model.nodeChanged(currentNode);

答案 1 :(得分:0)

用于选择单个节点的按钮代码在哪里?您是否正在尝试制作一个切换按钮,但您现在只需要检查该框?也许试试这个:

 buttonPushed() {
     //get your node for this button
    node.setSelected(!node.isSelected());
 }