【问题标题】:How to make child Tree Items checked/un-checked if parent Tree was made checked/un-checked如果选中/取消选中父树,如何选中/取消选中子树项
【发布时间】:2014-10-01 13:15:48
【问题描述】:

我有一个复选框树视图结构,由父节点和子节点组成。

如果选中了父树,我想让[父节点的]所有子节点显示为已选中。同样,如果未选中父树,则应取消选中其子树。

【问题讨论】:

  • 请检查此链接:git.eclipse.org/c/platform/eclipse.platform.swt.git/tree/… 基本上您需要在 treeitem 上添加选择侦听器,以便在选择项目时您可以选中/取消选中其子树项
  • @IshanRastogi:谢谢这个链接很有用
  • @IshanRastogi:如何检索树视图中已检查的项目列表?
  • 我是否应该手动解析所有树项以检查状态,但这是一项成本操作。有什么方法可以做到这一点?
  • 看看JFace CheckboxTreeViewer,你可以使用setSubtreeChecked()来检查孩子和getCheckedElements() i> 从树中获取选中的元素。即使您选择不使用它,查看代码也可以为您提供一些关于如何完成它的想法。

标签: java checkbox tree swt


【解决方案1】:

实现这一点的最佳方法是使用 JFace CheckboxTreeViewer,因为它具有以下预定义的方法来简化任务。

  1. setSubtreeChecked - 设置在选择父节点时选中的子元素
  2. getCheckedElements - 获取所有选中的树元素

    final CheckboxTreeViewer treeViewer = new CheckboxTreeViewer(parent);
    
    // When user checks a checkbox in the tree, check all its children
    treeViewer.addCheckStateListener(new ICheckStateListener() {
    public void checkStateChanged(CheckStateChangedEvent event) {
        // If the item is checked . . .
        if (event.getChecked()) {
          // . . . check all its children
          treeViewer.setSubtreeChecked(event.getElement(), true);
        }
      }
    });
    
    // Get the selected elements from the tree
    Object[] actuallyChecked = treeViewer.getCheckedElements();
    

【讨论】:

  • 如果父节点被取消选中,它的子节点也不会被取消选中。所以我修改了你的代码,这是我的代码treeViewer.addCheckStateListener(new ICheckStateListener() { public void checkStateChanged(CheckStateChangedEvent event) { treeViewer.setSubtreeChecked(event.getElement(),event.getChecked()); } }); 谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-23
  • 2013-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多