删除选择后SWT选择事件
我正在做一个简单的菜单来删除树上的项目。但是,删除项目后,树不会收到选择事件,因此,侦听器中的代码不会执行(完整代码中的侦听器将更新部分UI)。删除选择后SWT选择事件
我简化了下面的代码,省略了详细信息。它是这样的:
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 +单击组合取消选择所有itens,它会触发。
我该怎么办?有没有办法在删除itens后将SWT.Selection事件触发到树上,还是应该隔离监听器中的代码再次调用它?不应该tree.deselectAll()触发选择事件?
您可以用编程方式发送的选择事件:
Event event = new Event();
event.widget = tree;
event.display = tree.getDisplay();
event.type = SWT.Selection;
tree.notifyListeners(SWT.Selection, event);
谢谢!这解决了我的问题! 不应该由tree.deselectAll()自动触发事件吗? – 2015-02-11 17:01:58
'Tree.deselectAll'禁止发送通知。所以我想这是SWT设计的一部分。 – 2015-02-11 17:09:48
那么,SWT是跛脚。我查看了tree.deselectAll()的文档,并没有提到有关选择通知被该方法抑制的任何内容。这应该。 – 2015-02-11 18:49:31
'if(selected.length> 0)'部分不能编译,因为你似乎没有在任何地方声明'selected'。你是从我们这里隐藏的东西吗? – 2015-02-11 16:45:42
是的,我试图简化代码以避免混淆两者之间的内容。对不起,这确实让人困惑,我会编辑。我不应该尝试简化代码来提问吗? – 2015-02-11 16:50:02
我注意到我已经声明了它,TreeItem [] selected = tree.getSelection(); – 2015-02-11 16:50:55