Java swt表格:当鼠标不在表格上时,如何取消选择行?

Java swt表格:当鼠标不在表格上时,如何取消选择行?,java,eclipse-plugin,swt,eclipse-rcp,Java,Eclipse Plugin,Swt,Eclipse Rcp,我在做swt工作台。我的问题是,当我的鼠标点击其他地方时,我如何失去焦点/取消选择行 table.addListener(SWT.Selection, new Listener() { public void handleEvent(Event e) { TableItem[] selection = table.getSelection(); deleteButton.setEnabled(false); if(selection.

我在做swt工作台。我的问题是,当我的鼠标点击其他地方时,我如何失去焦点/取消选择行

table.addListener(SWT.Selection, new Listener() {
    public void handleEvent(Event e) {
         TableItem[] selection = table.getSelection();
         deleteButton.setEnabled(false);
         if(selection.length!=0){
             deleteButton.setEnabled(true);
         }
}});
作为这里的UI附件,只有当用户选择表中的某个内容时,才会启用deletebutton,然后用户才能继续删除该项目。我这里的问题是,一旦用户选择一个项目,除非用户删除该项目,否则无法取消选择。当用户单击UI上的其他区域时,是否有方法让我丢失选择?我知道有一个东西叫做“table.deselectAll()”,但我不知道应该把它放在哪里。当我点击UI上的其他地方时,handleEvent根本不会被触发。非常感谢你的帮助


SWT.FocusOut
事件添加侦听器,当表失去焦点时,该事件将被通知。

我应该在哪里定义此事件?它像这样“table.addListener(SWT.FocusOut,tableListner)”吗?由于某种原因,在我定义了这个事件之后,我的删除按钮总是被禁用:(我错过了什么吗?是的,它只是另一个侦听器。嗨,谢谢你回答我!我想我的问题是,由于“删除”按钮不是表的一部分,当selection.size()>1时,用户应该能够在这里进行删除。所以如果我添加将“table.addListener(SWT.FocusOut,tableListner)”事件添加到表中,该表正在执行table.decleaseall(),则删除功能将永远无法工作。我是否可以将focusOut侦听器设置在合成上,而不是表上?是否有更好的建议?再次感谢!可能,我认为您需要进行一点试验。我要说的是,通常不会执行所有这些操作,当焦点移动到某个ot时,大多数选择和启用都保持不变她的控件。是的,这就是我所想的,但不幸的是,在windows server 2008中,由于某种原因,一旦用户离开表格并单击其他控件,选择将消失,但“删除”按钮仍处于启用状态,这可能会导致混乱。(但它与您在windows 7上所说的一样,所以这有点令人沮丧…)