如何在TreeViewer中选择特定节点?

时间:2016-02-25 21:02:26

标签: java eclipse eclipse-plugin treeview eclipse-rcp

我为特定项目构建了一个树形图,但现在我需要在这个树形查看器中选择一个特定的项目/节点。

为了构建树形图,我这样做了:

viewer = new TreeViewer(composite);
viewer.getTree().setLayoutData(gridData);
viewer.setContentProvider(new FileTreeContentProvider());
viewer.setLabelProvider(new FileTreeLabelProvider());
viewer.setInput(ResourcesPlugin.getWorkspace().getRoot().getProject(folderName.getText()));
viewer.expandAll();

直到这里,一切都很好,但是现在,当我在树中选择特定项目时,我不知道如何使用听众做某事。任何的想法?感谢。

编辑:我明白了!

    viewer.addSelectionChangedListener(
            new ISelectionChangedListener(){
                public void selectionChanged(SelectionChangedEvent event) {
                    if(event.getSelection() instanceof IStructuredSelection) {
                        IStructuredSelection selection = (IStructuredSelection)event.getSelection();            
                        Object o = selection.getFirstElement();    

                        if (o instanceof IFile){

                            IFile file = (IFile)o;

                        }else {
                            //what ?
                        }
                    }
                }
            }
    );

1 个答案:

答案 0 :(得分:1)

这是一个优秀的第一步,但在Eclipse的核心和灵魂中甚至有更好的方法。

您的代码正在聆听本地更改,但您希望使代码可扩展,以便当有人在您的查看器中选择某些内容时,也会通知Eclipse中的其他插件。 / p>

Eclipse 4 API

为此,您将ESelectionService注入到您的部件中,然后使用您已提供的侦听器将选择转发到工作台。

@Inject
private ESelectionService selectionService;

viewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
  IStructuredSelection selection = (IStructuredSelection) event.getSelection();
  // set the selection to the service
  selectionService.setSelection(
      selection.size() == 1 ? selection.getFirstElement() : selection.toArray());

然后,抓住你自己的选择:

@Inject
void setSelection(@Optional @Named(IServiceConstants.ACTIVE_SELECTION) IFile pFile) {
  if (pFile == null) {
    //what ?
  } else {
    // magic!
  }
}

Eclipse 3 API

为此,您必须使用选择框架注册您的查看器。将其添加到已添加查看器的部件的createPartControl方法中:

    getSite().setSelectionProvider(viewer);

然后,抓住你自己的选择:

    getSite().getPage().addPostSelectionListener(this); // Implement ISelectionListener

参考文献:https://wiki.eclipse.org/E4/EAS/Selection