删除选择后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()触发选择事件?

+0

'if(selected.length> 0)'部分不能编译,因为你似乎没有在任何地方声明'selected'。你是从我们这里隐藏的东西吗? – 2015-02-11 16:45:42

+0

是的,我试图简化代码以避免混淆两者之间的内容。对不起,这确实让人困惑,我会编辑。我不应该尝试简化代码来提问吗? – 2015-02-11 16:50:02

+0

我注意到我已经声明了它,TreeItem [] selected = tree.getSelection(); – 2015-02-11 16:50:55

您可以用编程方式发送的选择事件:

Event event = new Event(); 
event.widget = tree; 
event.display = tree.getDisplay(); 
event.type = SWT.Selection; 
tree.notifyListeners(SWT.Selection, event); 
+0

谢谢!这解决了我的问题! 不应该由tree.deselectAll()自动触发事件吗? – 2015-02-11 17:01:58

+1

'Tree.deselectAll'禁止发送通知。所以我想这是SWT设计的一部分。 – 2015-02-11 17:09:48

+0

那么,SWT是跛脚。我查看了tree.deselectAll()的文档,并没有提到有关选择通知被该方法抑制的任何内容。这应该。 – 2015-02-11 18:49:31

有同样的情况,发现 this链接提的是,以编程为setSelection可能永远此事件,发送失败的设计,所以总是把它(如果需要)以编程方式设置太