我正在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
,则没有意义。如何在处置时将其删除?
答案 0 :(得分:1)
dispose()
(或Dialog
,无论如何)都有Wizard
API。覆盖它,并删除其中的侦听器。
例如
@Override
public void dispose()
{
anotherPage.someButton.removeSelectionListener(this);
super.dispose();
}