如何以编程方式更新两个不同的eclipse视图中的更改

时间:2017-11-16 06:24:08

标签: eclipse eclipse-plugin eclipse-rcp jface

我在RCP中创建了两个不同的视图。现在我想在一个eclipse视图中完成的更改将自动反映在另一个视图中。

我对RCP插件开发完全陌生。任何人都可以帮助我使用代码来实现上述要求吗?

1 个答案:

答案 0 :(得分:0)

我想你使用Eclipse 3平台,据我所知,有三种方法可以连接工作台部分(我的参考文献是#34; Eclipse Rich Client Platform"第二版p255):

1)要向其他部分公开结构更改,请使用Selection服务:

要注册零件更改,请使用ISelectionProvider,例如在第一个视图中:

public void createPartControl(Composite parent) {
  int style = SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL;
  viewer = new TableViewer(parent, style);
  getSite().setSelectionProvider(viewer);
  ...
}

要收听更改(不要在不再需要时忘记取消注册侦听器),请使用ISelectionListener,例如在第二个视图中:

public class ChaptersView extends ViewPart {
  private TableViewer viewer;
  ISelectionListener listener = new ISelectionListener() {
     public void selectionChanged(IWorkbenchPart part, ISelection sel) {
        if (!(sel instanceof IStructuredSelection))
           return;
        IStructuredSelection ss = (IStructuredSelection) sel;
        Object o = ss.getFirstElement();
        if (o instanceof Book)
           viewer.setInput(ss.size()==1 ? o : null);
     }
  };
  public void createPartControl(Composite parent) {
     getSite().getPage().addSelectionListener(listener);
  }
  public void dispose() {
     getSite().getPage().removeSelectionListener(listener);
  }
}

这些示例来自here

2)要收听关闭,打开或隐藏等部分事件,请使用部分侦听器:

您必须在某处实现IPartListener2,然后使用活动工作台窗口的活动页面将此侦听器添加到部件侦听器:

workbenchWindow().getActivePage().addPartListener(IPartListener2);

不再需要时忘记取消注册听众:

workbenchWindow().getActivePage().removePartListener(IPartListener2);

3)您可以实现自己的通信机制,但可能会在部件之间引入过强的耦合。