首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >以编程方式触发RCP选择事件

以编程方式触发RCP选择事件
EN

Stack Overflow用户
提问于 2012-02-02 03:33:39
回答 7查看 19K关注 0票数 25

在我的Eclipse RCP应用程序中,我使用了这个漂亮的article中描述的选择服务。一个视图中有一个注册为SelectionProvider的TreeViewer

getSite().setSelectionProvider(viewer);

另一个视图是从TreeViewer接收事件

代码语言:javascript
复制
selectionListener = new ISelectionListener() {
  public void selectionChanged(IWorkbenchPart part, ISelection selection) {
    pageSelectionChanged(part, selection);
  }
 };
 getSite().getPage().addSelectionListener(selectionListener);

如果事件是由我正常的鼠标点击触发的,那么一切都很正常。我想通过选择树中的一项来以编程方式触发一个选择事件:

代码语言:javascript
复制
treeViewer.setSelection(new StructuredSelection(element),true);

这不管用。在接收器视图中未调用方法selectionChanged。该问题将在此forum thread中讨论。没有解决方案。

编辑

没有适当的方法来处理鼠标触发的单击,就像以编程方式选择一样。单击鼠标将激活视图,而所选内容不会以编程方式激活视图。

我的解决方案是通过Selection Service以与第一个视图相同的方式注册第二个视图。在此之后,两个视图都直接从活动编辑器中获取选择事件。

EN

回答 7

Stack Overflow用户

发布于 2012-09-13 16:01:08

你可以做两件事:

1)进行选择,然后为SWT.SELECTION调用notify listeners,即:

代码语言:javascript
复制
mybutton.setSelection(true);
mybutton.notifyListeners(SWT.Selection, new Event());

notifyListener方法旨在用于自定义控件,因此更准确地说,您可以执行选项2。

2)调用您在监听器中调用的方法,即:

代码语言:javascript
复制
this.myButton.addSelectionListener(new SelectionListener() {
    public void widgetSelected(final SelectionEvent e) {
      doSomethingaboutTheSelMethod();
 }

在这种情况下,您可以调用:

代码语言:javascript
复制
doSomethingaboutTheSelMethod();
票数 29
EN

Stack Overflow用户

发布于 2012-05-10 23:15:04

我刚刚遇到了这个问题,并像这样解决了它:

代码语言:javascript
复制
treeViewer.getControl.setFocus();
treeViewer.setSelection(new StructuredSelection(element),true);

在做出选择之前,将焦点放在树上似乎会通知听众,而以前并不是这样。

票数 6
EN

Stack Overflow用户

发布于 2012-08-23 20:32:51

我也有同样的问题。我使用的变通方法是在调用treeViewer.getTree().select(treeViewer.getTree().getItem(0));方法之后以编程方式触发侦听器上的事件。

  1. 查询在树上注册的监听程序并获取对您的监听程序的引用:

listeners = treeViewer.getTree().getListeners(SWT.Selection);org.eclipse.swt.widgets.Listener[] (int i=0;i

  • 手动调用listenersi方法创建listenersi并触发选择:

事件underlyingEvent =新事件();underlyingEvent.widget = treeViewer.getTree();SelectionEvent selectionEvent =新SelectionEvent(underlyingEvent);underlyingEvent

这个解决方案对我来说效果很好。希望它能帮到你。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9102026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档