1

TreeViewer2つ並べて複合したEclipseプラグインを作成しようとしています。各コンテンツをクリックすると、TreeViewerEclipse プロパティ ビューに適切な情報が表示されます。今、このツリービューアーの両方に選択プロバイダーを設定したかったので、使用しました

  setSelectionProvider(treeViewer1)
  setSelectionProvider(treeviewer2)

ただし、最初のツリービューアーが上書きされるため、2 番目に追加されたツリービューアーのみが設定されます。クラス Queue.java からこの 2 つのツリービューアーを開始しています。したがって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 に答える