uı6*_*uɐp 23 java jface eclipse-rcp
在我的Eclipse RCP应用程序中,我使用了本文中描述的Selection Service .在一个视图中有一个TreeViewer注册为SelectionProvider:
getSite().setSelectionProvider(viewer);
另一个视图是从TreeViewer接收事件:
selectionListener = new ISelectionListener() {
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
pageSelectionChanged(part, selection);
}
};
getSite().getPage().addSelectionListener(selectionListener);
Run Code Online (Sandbox Code Playgroud)
一切正常,如果事件被触发我的正常鼠标点击.我想通过选择树中的项目以编程方式触发选择事件:
treeViewer.setSelection(new StructuredSelection(element),true);
Run Code Online (Sandbox Code Playgroud)
这不起作用.方法selectionChanged不在receiver-view中调用.这个论坛帖子讨论了这个问题.没有解决方案.
编辑
没有正确的方法来处理鼠标触发点击与编程选择相同的方式.单击鼠标可激活视图,而编程选择则不会.
我的解决方案是以与第一个视图相同的方式注册第二个Selection Service视图.之后,两个视图都直接从活动编辑器获取选择事件.
use*_*988 26
你可以做两件事:
1)进行选择,然后调用通知侦听器获取SWT.SELECTION即:
mybutton.setSelection(true);
mybutton.notifyListeners(SWT.Selection, new Event());
Run Code Online (Sandbox Code Playgroud)
notifyListener方法旨在用于自定义控件,所以更准确的是你可以选择2号选项.
2)调用你在监听器中调用的方法,即:
this.myButton.addSelectionListener(new SelectionListener() {
public void widgetSelected(final SelectionEvent e) {
doSomethingaboutTheSelMethod();
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您可以致电:
doSomethingaboutTheSelMethod();
Run Code Online (Sandbox Code Playgroud)
我刚刚遇到这个问题并解决了这个问题:
treeViewer.getControl.setFocus();
treeViewer.setSelection(new StructuredSelection(element),true);
Run Code Online (Sandbox Code Playgroud)
在做出选择之前将焦点放在树上似乎会通知听众,而不是之前.
尝试做一个
treeViewer.fireSelectionChanged();
Run Code Online (Sandbox Code Playgroud)
或者
treeViewer.firePostSelectionChanged();
Run Code Online (Sandbox Code Playgroud)
设置选择后。
编辑
好吧,所以上面的调用不起作用...如果您足够绝望,您可以追踪源代码并找出实际调用的内容selectionChanged()。只需在您的方法中设置一个断点并启动堆栈即可。也许您知道如何以另一种方式实现此调用。