1

我正在尝试创建具有两个TreeViewer并排复合的 Eclipse 插件。单击每个TreeViewer内容 Eclipse 属性视图应提供适当的信息。现在我想为这两个 treeviewer 设置选择提供程序,因此我使用了

  setSelectionProvider(treeViewer1)
  setSelectionProvider(treeviewer2)

但是只有第二个添加的 treeviewer 被设置,因为第一个被覆盖了。我正在从 Queue.java 类中启动这两个 treeviewer。因此,我ISelectionProvider在 Queue.java 上实现了如下接口:

public void addSelectionChangedListener(ISelectionChangedListener listener)
{
  selectionChangedListeners.add(listener);
}

public void
    removeSelectionChangedListener(ISelectionChangedListener listener)
{
  selectionChangedListeners.remove(listener);
}

private void fireSelectionChanged(final SelectionChangedEvent event)
{
  Object[] listeners = selectionChangedListeners.getListeners();
  for (int i = 0; i < listeners.length; ++i)
  {
     final ISelectionChangedListener l =
         (ISelectionChangedListener) listeners[i];
     Platform.run(new SafeRunnable()
     {
        public void run()
        {
           l.selectionChanged(event);
        }

        @Override
        public void handleException(Throwable e)
        {
           removeSelectionChangedListener(l);
        }
     });
   }
}

   public void setSelection(ISelection selection)
   {
       fireSelectionChanged(new SelectionChangedEvent(this, selection));
    }

     public ISelection getSelection()
    {
      ArrayList<Object> list = new ArrayList<Object>();
     Object o = getProperties();
     if (o instanceof IPropertySource)
         list.add(o);
     return new StructuredSelection(list);
   } 

谁能帮我解决这个问题。我会很感激。提前致谢。托尔。

4

1 回答 1

5

您的视图必须编写一个选择提供程序包装器或调解器,以委托给当前具有焦点的查看器。然后您的视图将设置如下:

SelectionProviderWrapper wrapper = new SelectionProviderWrapper();
wrapper.addViewer(treeViewer1);
wrapper.addViewer(treeViewer2);
getSite().setSelectionProvider(wrapper);

我将查看org.eclipse.jdt.internal.ui.viewsupport.SelectionProviderMediator多个 JFace 查看器的选择提供程序的示例。

于 2012-05-15T16:48:13.493 回答