java - TreeViewer 对话框 java eclipse 不提供树项目子项

标签 java eclipse treeview treeviewer

我创建了一个实现 ITreeContentProvider 的自定义内容提供程序,我的自定义模型与此类似:Vogella Tutorial JFace其中有类别和待办事项,待办事项作为类别的子项存储为类类别中的列表。 我正在使用 Eclipse 对话框 CheckedTreeSelectionDialog ,它应该与任何树对话框相同,我将其扩展为能够获取 map 中选中的元素,但由于某种原因我可以获得 level1 的树项,但是不是他们的 child ,我不明白为什么。

    public void createMapOfCheckedItems() {
    mapOfCheckedElements = new HashMap<Object, List<Object>>();
    for (TreeItem level1 : getTreeViewer().getTree().getItems()) {
     if (level1.getChecked()) {
      List<Object> checkedChildren = new ArrayList<Object>();
      for (TreeItem level2 : level1.getItems()) {
                if (level2.getChecked()) {
                    checkedChildren.add(level2.getData());
                }
            }
            mapOfCheckedElements.put(level1.getData(), checkedChildren);
        }
    }
}

代码如上,但 level1.getItems() 返回一个空树项,但选择对话框正确显示父项和子项。

最佳答案

阅读TreeItem#getItems() API Javadoc 我发现了这个:

Returns a (possibly empty) array of TreeItems which are the direct item children of the receiver. Note: This is not the actual structure used by the receiver to maintain its list of items, so modifying the array will not affect the receiver.

我对 SWT API 的了解并不太广泛,但我的猜测是使用 TreeViewer#getItems(org.eclipse.swt.widgets.Item)方法可以解决这个问题,因为查看器应该维护所有节点的状态。

所以,您的代码应该类似于:

if (level1.getChecked()) {
      List<Object> checkedChildren = new ArrayList<Object>();
      for (Item level2 : getTreeViewer().getItems(level1)) {
            if (((TreeItem)level2).getChecked()) {
                 checkedChildren.add(level2.getData());
            }
      }
      mapOfCheckedElements.put(level1.getData(), checkedChildren);
 }

关于java - TreeViewer 对话框 java eclipse 不提供树项目子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13607403/

相关文章:

c# - TreeView 不执行 UI 虚拟化

c# - 如何更改 WinForms Treeview 控件中用于内联编辑节点文本的字体?

Java 无法使用 ProcessBuilder 运行 Exec Jar

java - 是否可以从纯 Java 访问 BDB?

java - 在没有任何列数据的情况下扫描 HBase 中的行名

java - junit 不尊重 Maven 类路径

c++ - Linux 共享库 C++

Java - 你如何向上和向下转换同一个对象

java - 任务 ':run'的执行失败。 >流程'命令...以非零退出值1完成

javascript - 如何有条件地为 Material ui TreeView 组件设置扩展属性