Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TreeViewer对话框java eclipse不提供树项子项_Java_Eclipse_Treeview_Treeviewer - Fatal编程技术网

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

TreeViewer对话框java eclipse不提供树项子项,java,eclipse,treeview,treeviewer,Java,Eclipse,Treeview,Treeviewer,我创建了一个自定义内容提供程序,它实现了ITreeContentProvider,我的自定义模型与此类似:它具有类别,TODO和TODO作为类别的子级存储在类类别中的列表中。 我正在使用eclipse dialogCheckedTreesectionDialog,它应该与任何树对话框相同,我扩展了它,以便能够在地图中获取选中的元素,但由于某些原因,我可以获取Level 1的树元素,但不能获取它们的子元素,我无法理解为什么 public void createMapOfCheckedIte

我创建了一个自定义内容提供程序,它实现了
ITreeContentProvider
,我的自定义模型与此类似:它具有类别,TODO和TODO作为类别的子级存储在类类别中的列表中。 我正在使用eclipse dialog
CheckedTreesectionDialog
,它应该与任何树对话框相同,我扩展了它,以便能够在地图中获取选中的元素,但由于某些原因,我可以获取Level 1的树元素,但不能获取它们的子元素,我无法理解为什么

    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);
        }
    }
}
public void createMapOfCheckedItems(){
MapOfCheckDeletes=新HashMap();
对于(树项级别1:getTreeViewer().getTree().getItems()){
如果(level1.getChecked()){
List checkedChildren=new ArrayList();
for(TreeItem level2:level1.getItems()){
如果(level2.getChecked()){
checkedChildren.add(level2.getData());
}
}
MapofCheckDeletes.put(level1.getData(),checkedChildren);
}
}
}
代码如上所示,但是
level1.getItems()
返回一个空的treeitem,但是选择对话框正确地显示了父母和孩子。

阅读API Javadoc我发现:

返回作为接收方的直接项子项的TreeItems数组(可能为空)。 注意:这不是接收方用于维护其项目列表的实际结构,因此修改数组不会影响接收方

我对SWTAPI的了解不太广泛,但我猜测使用该方法可以解决问题,因为支持查看器获取所有节点的状态

因此,您的代码应该如下所示:

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);
 }
if(level1.getChecked()){
List checkedChildren=new ArrayList();
对于(项目级别2:getTreeViewer().getItems(级别1)){
if(((TreeItem)level2.getChecked()){
checkedChildren.add(level2.getData());
}
}
MapofCheckDeletes.put(level1.getData(),checkedChildren);
}

如何访问某个密钥的子项?你们做过检查地图吗?得到(1级)?也许你应该把树元素直接放到HashMap中,而不是它的数据中。你如何创建查看器?请发布
getTreeViewer()
方法的内容。