删除选择后的 SWT 选择事件

SWT selection event after deleting selection

我正在制作一个简单的菜单来删除树上的项目。但是删除item后,树并没有收到选择事件,因此监听器中的代码没有执行(监听器,在完整代码中,更新了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() 不应该触发选择事件吗?

您可以通过以下方式以编程方式发送选择事件:

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

有相同情况发现 this link 提到,由于设计原因,以编程方式 setSelection 可能永远不会发送此事件,因此请始终在设置后以编程方式发送它(如果需要)