我正在制作一个简单的菜单来删除树上的项目。但是,删除项后,树不会收到选择事件,因此,侦听器中的代码不会执行(侦听器,在完整代码中,更新UI的一部分)。
我简化了下面的代码,省略了细节。它是这样的:
tree.addListener (SWT.Selection, new Listener(){
public void handleEvent(Event e) {
(....)
}
}
我也试过这个:
tree.addSelectionListener (new SelectionListener(){
public void widgetDefaultSelected(SelectionEvent e){
(...)
}
public void widgetSelected(SelectionEvent e) {
(...)
}
}
在我的菜单操作(删除选择)上,有以下内容:
TreeItem [] selected = tree.getSelection();
tree.deselectAll();
if (selected.length > 0)
{
for( TreeItem i : selected){
i.dispose();
}
}
删除选择后,我的选择侦听器不会触发。如果我使用ctrl + click组合取消选择所有这些,它会激发。
我该怎么办?有没有办法在删除itens之后将SWT.Selection事件触发到树中,还是应该将侦听器内的代码隔离再调用它?不应该在tree.deselectAll()中激活一个Selection事件吗?
答案 0 :(得分:4)
您可以通过以下方式以编程方式发送选择事件:
Event event = new Event();
event.widget = tree;
event.display = tree.getDisplay();
event.type = SWT.Selection;
tree.notifyListeners(SWT.Selection, event);
答案 1 :(得分:1)
有相同的情况,发现 this链接提及,以编程方式setSelection可能永远不会因设计而发送此事件,所以总是在设置后以编程方式发送它(如果需要)