Java 在JFace树视图中获取所选内容的根节点

Java 在JFace树视图中获取所选内容的根节点,java,treeview,jface,Java,Treeview,Jface,我有一个JFace树视图,其中有许多根节点,每个根节点都有多个级别的子节点。比如说 Root 1 孩子1 child1.child1 孩子2 child2.child1 根2 孩子1 child1.child1 孩子2 child2.child1 如果我点击根1下的任何子节点,我想得到根1节点,如果我点击根2下的任何子节点,我想得到根2节点 我使用selection进行了检查,但只有一个方法getFirstElement(),我如何才能做到这一点 viewer.addDoubleClickLi

我有一个JFace树视图,其中有许多根节点,每个根节点都有多个级别的子节点。比如说

Root 1
孩子1
child1.child1
孩子2
child2.child1
根2
孩子1
child1.child1
孩子2
child2.child1
如果我点击根1下的任何子节点,我想得到根1节点,如果我点击根2下的任何子节点,我想得到根2节点

我使用selection进行了检查,但只有一个方法getFirstElement(),我如何才能做到这一点

viewer.addDoubleClickListener(新的IDoubleClickListener(){
@凌驾
公共无效双击(双击事件){
TreeViewer=(TreeViewer)事件。getViewer();
IsStructuredSelection thisSelection=(IsStructuredSelection)事件。getSelection();
Object selectedNode=thisSelection.getFirstElement();
viewer.setExpandedState(selectedNode,
!viewer.getExpandedState(selectedNode));
}
}); 

您可以使用树查看器内容提供程序的
getParent(Object element)
方法来获取元素的父元素,这样您就可以使用该方法向上移动树

你需要记住你的内容提供者,或者使用

ITreeContentProvider provider = (ITreeContentProvider)viewer.getContentProvider();
其中
viewer
是树查看器

编写内容提供者的
getParent
方法是您的责任

因此,您的数据模型类必须使用有关其父类的信息创建:

class DataModelObject
{
  private DataModelObject parent;

  DataModelObject(DataModelObject parent)
  {
    this.parent = parent;
  }

  DataModelObject getParent()
  {
    return parent;
  }
}
或者只保存根目录:

class DataModelObject
{
  private DataModelObject root;

  DataModelObject(DataModelObject root)
  {
    this.root = root;
  }

  DataModelObject getRoot()
  {
    return root;
  }
}

我实现了一个selectionlistener,基于树中的选定项,我希望找到它的根节点,并使用内容提供者或向数据模型类添加代码。“树查看器”没有任何内容可以提供给您。我应该如何将内容提供程序添加到根节点?@greg-499您可以为我提供一些伪代码吗?