如何删除Eclipse Widget中的侦听器?

时间:2014-03-08 23:51:28

标签: java eclipse swt

我正在SWT中创建一个侦听其他组件中事件的组件。但是,当处置该组件时,它仍然被注册为监听器。我想知道在处理这个组件时如何自动摆脱这个监听器。

这就是我的意思:

public myDialog implements SelectionListener, ModifyListener {
     public Button myButton = new Button();

     public myDialog(){//constructor
             anotherPage.someButton.addSelectionListner(this);
             myButton.addSelectionListner(this);
     }

     public void widgetSelected(SelectionEvent e){
          if(e.getSource()==anotherPage.someButton){
               //do something
          }
          else if(e.getSource()==myButton){
               //do something else
          }
     }
}

    public anotherPage extends AbstractSystemWizardPage{
        public Button someButton=new Button();
        //...
    }

myDialog会同时收听anotherPage中自己的按钮和按钮。如果用户决定处置myDialog(关闭对话框)但它仍然监听someButton,则没有意义。如何在处置时将其删除?

1 个答案:

答案 0 :(得分:1)

dispose()(或Dialog,无论如何)都有Wizard API。覆盖它,并删除其中的侦听器。

例如

@Override
public void dispose()
{
    anotherPage.someButton.removeSelectionListener(this);

    super.dispose();
}