Java 选中TableItem时,带有SWT.CHECK的Eclipse表格小部件触发两个事件

Java 选中TableItem时,带有SWT.CHECK的Eclipse表格小部件触发两个事件,java,events,eclipse-plugin,eclipse-cdt,Java,Events,Eclipse Plugin,Eclipse Cdt,我正在制作一个Eclipse(3.6.2)CDT(7.0.2)插件,它使用我自己的向导页面(扩展MBSCustomPage)。此向导页面显示一个表格,其中填充了一些TableItems,可以通过单击这些TableItems进行检查或取消检查(与往常一样)问题是,当选中(或取消选中)TableItem复选框时,我总是收到两个事件。在收到的第一个事件中,我有一个(SelectedEvent)e.detail==SWT.CHECK,即使首先检查了TableItem,在第二个事件中,(SelectedE

我正在制作一个Eclipse(3.6.2)CDT(7.0.2)插件,它使用我自己的向导页面(扩展MBSCustomPage)。此向导页面显示一个表格,其中填充了一些TableItems,可以通过单击这些TableItems进行检查或取消检查(与往常一样)问题是,当选中(或取消选中)TableItem复选框时,我总是收到两个事件。在收到的第一个事件中,我有一个(SelectedEvent)e.detail==SWT.CHECK,即使首先检查了TableItem,在第二个事件中,(SelectedEvent)e.detail==0!。所以我无法知道TableItem是否真的被检查过。 这是我的代码(有点):

为什么在单击TableItem的复选框时会调用两次widgetSelected()? 我测试了即使widgetSelected()方法中没有代码,也会触发事件。 在EclipseBugzilla数据库中,我并没有发现任何东西。。。对我来说真的很奇怪,但我不是一个经验丰富的Eclipse插件程序员(甚至不是Java):)

谢谢

改为使用((TableItem)arg0.item).getChecked()。上述代码可能无法解析为正在检查的项目,因为它查找第一个选定的项目(可能是也可能不是正在检查的项目)。如果未选择任何表项(并且无需选择任何项即可选中/取消选中项),则会出现空指针异常(NPE)。
table.addListener(SWT.Selection, new Listener() {
  public void handleEvent(Event arg0) {
    String string = arg0.detail == SWT.CHECK ? "Checked" : "Selected";
    if (arg0.detail == SWT.CHECK) {
      System.out.println(arg0.item + " " + string+ ":" + 
                         ((Table)arg0.widget).getSelection()[0].getChecked());
     }                         
     else {
       System.out.println(arg0.item + " " + string);
     }
   }
});
table.addListener(SWT.Selection, new Listener() {
  public void handleEvent(Event arg0) {
    String string = arg0.detail == SWT.CHECK ? "Checked" : "Selected";
    if (arg0.detail == SWT.CHECK) {
      System.out.println(arg0.item + " " + string+ ":" + 
                         ((Table)arg0.widget).getSelection()[0].getChecked());
     }                         
     else {
       System.out.println(arg0.item + " " + string);
     }
   }
});