我有两个视图:一个有TreeViewer,另一个有SWT widget。我希望带有小部件的视图中的活动导致带有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()方法永远不会被调用。
我的猜测是,我在生产者端做错了什么,因为消费者端看起来很简单。有什么建议吗?
谢谢!
琼恩
发布于 2011-05-20 23:47:04
你告诉Workbench关于你的选择提供者了吗?在生产者端,在createPartControl()中,您需要:
getSite().setSelectionProvider(this);发布于 2011-09-30 22:20:38
由于在整个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);但请注意,这种方法很有可能是搬起石头砸自己的脚(根据我自己的经验)。
https://stackoverflow.com/questions/6073869
复制相似问题