【问题标题】:setSelectionProvider over two different controls not workingsetSelectionProvider 在两个不同的控件上不起作用
【发布时间】:2012-05-15 14:32:42
【问题描述】:

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

  setSelectionProvider(treeViewer1)
  setSelectionProvider(treeviewer2)

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

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);
   } 

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

【问题讨论】:

    标签: eclipse eclipse-plugin jface treeviewer


    【解决方案1】:

    您的视图必须编写一个选择提供程序包装器或中介器,以委托给当前具有焦点的查看器。然后你的视图会这样设置:

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

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

    【讨论】:

    • 谢谢保罗......这是我过去两天一直在寻找的......但我仍然很困惑你指出的 addViewer() 函数下的代码应该是什么?
    • 您只是告诉包装器它关心哪些视图。在我链接到的示例代码中,看起来他们只是在构造函数中指定它。
    猜你喜欢
    • 2012-05-19
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多