在我的Eclipse RCP应用程序中,我使用了这个漂亮的article中描述的选择服务。一个视图中有一个注册为SelectionProvider的TreeViewer
getSite().setSelectionProvider(viewer);
另一个视图是从TreeViewer接收事件
selectionListener = new ISelectionListener() {
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
pageSelectionChanged(part, selection);
}
};
getSite().getPage().addSelectionListener(selectionListener);
如果事件是由我正常的鼠标点击触发的,那么一切都很正常。我想通过选择树中的一项来以编程方式触发一个选择事件:
treeViewer.setSelection(new StructuredSelection(element),true);
这不管用。在接收器视图中未调用方法selectionChanged。该问题将在此forum thread中讨论。没有解决方案。
编辑
没有适当的方法来处理鼠标触发的单击,就像以编程方式选择一样。单击鼠标将激活视图,而所选内容不会以编程方式激活视图。
我的解决方案是通过Selection Service
以与第一个视图相同的方式注册第二个视图。在此之后,两个视图都直接从活动编辑器中获取选择事件。
发布于 2012-09-13 16:01:08
你可以做两件事:
1)进行选择,然后为SWT.SELECTION调用notify listeners,即:
mybutton.setSelection(true);
mybutton.notifyListeners(SWT.Selection, new Event());
notifyListener方法旨在用于自定义控件,因此更准确地说,您可以执行选项2。
2)调用您在监听器中调用的方法,即:
this.myButton.addSelectionListener(new SelectionListener() {
public void widgetSelected(final SelectionEvent e) {
doSomethingaboutTheSelMethod();
}
在这种情况下,您可以调用:
doSomethingaboutTheSelMethod();
发布于 2012-05-10 23:15:04
我刚刚遇到了这个问题,并像这样解决了它:
treeViewer.getControl.setFocus();
treeViewer.setSelection(new StructuredSelection(element),true);
在做出选择之前,将焦点放在树上似乎会通知听众,而以前并不是这样。
发布于 2012-08-23 20:32:51
我也有同样的问题。我使用的变通方法是在调用treeViewer.getTree().select(treeViewer.getTree().getItem(0));
方法之后以编程方式触发侦听器上的事件。
listeners = treeViewer.getTree().getListeners(SWT.Selection);org.eclipse.swt.widgets.Listener[] (int i=0;i
事件underlyingEvent =新事件();underlyingEvent.widget = treeViewer.getTree();SelectionEvent selectionEvent =新SelectionEvent(underlyingEvent);underlyingEvent
这个解决方案对我来说效果很好。希望它能帮到你。
https://stackoverflow.com/questions/9102026
复制相似问题