我有两个观点:一个有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));
}
}
这似乎适用于选择方面,但另一方面我想要消费选择,没有任何反应。在该查看器中,我实现了ISelectionListener
接口,并在createPartControl()
方法的开头执行以下操作:
getSite().getPage().addSelectionListener(this);
但selectionChanged()
方法永远不会被调用。
我的猜测是我在生产者方面做错了,因为消费者方面似乎非常简单。有什么指针吗?
谢谢!
乔恩
答案 0 :(得分:3)
您是否告诉Workbench您的选择提供商?在生产者方面,在你的createPartControl()中你需要:
getSite().setSelectionProvider(this);
答案 1 :(得分:1)
由于在整个SWT中应用了a design decision,因此通常不会发送事件以响应程序更改(与用户操作相反)。但是,您可以执行以下操作:
// (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);
但是要注意这种方法会让你有机会在脚下射击(根据我自己的经验)。