以编程方式激发 RCP 选择事件

2022-09-01 18:49:58

在我的 Eclipse RCP 应用程序中,我使用选择服务,如这篇不错的文章中所述。在一个视图中有一个注册为选择提供程序树查看器

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);

这不起作用。方法选择在接收方视图中不调用Changed。此问题在此论坛帖子中讨论。没有解决办法。

编辑

没有正确的方法来处理鼠标触发的单击,其方式与以编程方式选择相同。单击鼠标将激活以编程方式选择的视图所不激活的视图。

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


答案 1

您可以执行两项操作:

1) 执行选择,然后调用通知侦听器以获取 SWT。选择即:

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();

答案 2

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

treeViewer.getControl.setFocus();
treeViewer.setSelection(new StructuredSelection(element),true);

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


推荐