【问题标题】:Problems with Programatically selecting checkbox nodes以编程方式选择复选框节点的问题
【发布时间】:2012-02-03 19:26:19
【问题描述】:

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

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

对于 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);
        }

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

【问题讨论】:

  • 是错字吗?您正在使用不同的枚举。 while (enumeratorForTree.hasMoreElements()) { TreeNode child = enumeratorForColumnTree.nextElement();
  • 我不太清楚你的问题。清除复选框时没有提及?您必须在某个地方将它们设置回false?选中已选中的框是无效的吗?
  • 如需尽快获得更好的帮助,请发帖SSCCE
  • 请学习java命名约定并遵守它们

标签: java swing checkbox jtree


【解决方案1】:

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

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

【讨论】:

  • 每日学习项目我确信 XxxEditor 已通知 DefaultXxxModel +1
  • @mKorbel - 编辑器确实如此(实际上它是树的 CellEditorListener 某些在 ui 委托中),但这里的问题(据我所知)是关于 以编程方式 更改节点状态
  • 同意质疑,但我可以肯定的是,直到此刻枚举更改了节点中的每个 JComponents 以及我拥有的所有代码都可以在没有它的情况下工作,有趣,谢谢
【解决方案2】:

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

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

【讨论】:

  • 实际上,在全选之后,我可以看到节点被检查。但是在这样做之后,如果我们按下任何其他按钮,我就无法在相应的节点中看到相应的变化。
猜你喜欢
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 1970-01-01
  • 2019-07-18
  • 1970-01-01
  • 1970-01-01
  • 2013-07-29
  • 1970-01-01
相关资源
最近更新 更多