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);
但要注意,这种方法会导致一个很好的机会,射中自己的脚(根据我自己的经验)