Eclipse rcp RCP选择服务

Eclipse rcp RCP选择服务,eclipse-rcp,selection,viewer,Eclipse Rcp,Selection,Viewer,我有两个视图:一个是带有TreeViewer的视图,另一个是带有SWT小部件的视图。我希望视图中带有小部件的活动能够通过TreeViewer在视图中引起更改。在阅读关于这个主题的各种资源时,他们都谈到允许JFace查看器发布选择和接收通知,但他们没有提到能够从文本小部件触发这些选择 假设此代码所在的视图是一个ISelectionProvider,我可以这样做吗 Text someText = new Text( parent, SWT.BORDER ) ; someText.addKeyList

我有两个视图:一个是带有
TreeViewer
的视图,另一个是带有SWT小部件的视图。我希望视图中带有小部件的活动能够通过
TreeViewer
在视图中引起更改。在阅读关于这个主题的各种资源时,他们都谈到允许JFace查看器发布选择和接收通知,但他们没有提到能够从文本小部件触发这些选择

假设此代码所在的视图是一个
ISelectionProvider
,我可以这样做吗

Text someText = new Text( parent, SWT.BORDER ) ;
someText.addKeyListener( new KeyListener() {
  @Override
  public void keyPressed( KeyEvent e ) {}

  @Override
  public void keyReleased( KeyEvent e ) {
    ...
    ...
    CellInfo cellInfo = new CellInfo( /*text collected while typing*/);
    currentSelection = new StructuredSelection( cellInfo ) ; 
    setSelection( currentSelection ) ;

...
...

public void setSelection( ISelection selection ) {
  Object[] list = getListeners() ;//listeners.getListeners();  
  for (int i = 0; i < list.length; i++) {  
    ((ISelectionChangedListener) list[i])  
     .selectionChanged(new SelectionChangedEvent(this, selection));  
  } 
}
但是,
selectionChanged()
方法从未被调用

我的猜测是,我在生产者方面做错了什么,因为消费者方面似乎很直截了当。有什么建议吗

谢谢


Jon

您是否已向工作台介绍了您的选择提供商?在生产者方面,在createPartControl()中,您需要:

getSite().setSelectionProvider(this);

您是否已向Workbench介绍了您的选择提供者?在生产者方面,在createPartControl()中,您需要:

getSite().setSelectionProvider(this);
由于这在整个SWT中都适用,所以通常不会发送事件来响应编程更改(与用户操作相反)。但是,您可以执行以下操作:

// (1) set a new selection for the view's viewer
myViewer.setSelection(ISelection, boolean);
// (2) setup event to be fired
// (2.1) create new org.eclipse.swt.widgets.Event
Event event = new Event();
// (2.2) set some fields in event
// e.g., event.widget = myViewer.getControl();
// (3) fire event via Viewer's Control (is Widget)
myViewer.getControl().notifyListeners(SWT.Selection, event);
但是请注意,这种方法会导致一个很好的机会,让你射中自己的脚(根据我自己的经验)。

由于这种方法适用于整个SWT,所以事件通常不会发送以响应编程更改(与用户操作相反)。但是,您可以执行以下操作:

// (1) set a new selection for the view's viewer
myViewer.setSelection(ISelection, boolean);
// (2) setup event to be fired
// (2.1) create new org.eclipse.swt.widgets.Event
Event event = new Event();
// (2.2) set some fields in event
// e.g., event.widget = myViewer.getControl();
// (3) fire event via Viewer's Control (is Widget)
myViewer.getControl().notifyListeners(SWT.Selection, event);
但要注意,这种方法会导致一个很好的机会,射中自己的脚(根据我自己的经验)