好的,我有很多Checkbox,当程序第一次运行时,它将addClickHandler
所有复选框,当我重置程序时,我想清除所有Handler。
这是示例代码;
private HandlerRegistration countryHandlerReg=null;
private HandlerRegistration postCodeHandlerReg=null;
public void resetVariables(){
if(postCodeHandlerReg!=null){
postCodeHandlerReg.removeHandler();
}
if(countryHandlerReg!=null){
countryHandlerReg.removeHandler();
}
}
public void addClickHandlerForCheckBox(HandlerRegistration handlerReg, CheckBox myCheckBox){
handlerReg=myCheckBox.addClickHandler(new MyClickHandler(myCheckBox));
}
public void showData(){
resetVariables();
addClickHandlerForCheckBox(postCodeHandlerReg, getView().getPostCodeCheckBox());
addClickHandlerForCheckBox(countryHandlerReg, getView().getCountryCheckBox());
}
有一个按钮可以调用showData()
以上代码无法正常运行,因为它无法运行.removeHandler()
所以如果我单击按钮2或3次,则每个复选框将有2或3 MyClickHandler()
。
但是,如果我在不使用方法showData()
的情况下更改addClickHandlerForCheckBox
,那么它运行正常:
public void showData(){
resetVariables();
postCodeHandlerReg= getView().getPostCodeCheckBox().addClickHandler(new MyClickHandler(getView().getPostCodeCheckBox()));
....
}
所以我认为如果我使用addClickHandlerForCheckBox
方法,那么它就无法删除处理程序。
答案 0 :(得分:3)
执行此类更改,将删除处理程序
public HandlerRegistration addClickHandlerForCheckBox(CheckBox myCheckBox) {
return myCheckBox.addClickHandler(new MyClickHandler(myCheckBox));
}
public void showData() {
resetVariables();
postCodeHandlerReg = addClickHandlerForCheckBox(postCode);
countryHandlerReg = addClickHandlerForCheckBox(country);
}
答案 1 :(得分:0)
对于JCheckBox,您可以添加和删除这样的侦听器:
public static void main(String [] args)
{
JCheckBox checkBox = new JCheckBox();
checkBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent arg0) {
// TODO Auto-generated method stub
}
});
ItemListener [] itemListeners = checkBox.getListeners(ItemListener.class);
System.out.println(itemListeners.length);
for (int i = 0; i < itemListeners.length; i++)
{
checkBox.removeItemListener(itemListeners[i]);
}
System.out.println(checkBox.getListeners(ItemListener.class).length);
}
看起来你正在使用一些自定义类。因此,如果此示例没有帮助,您可能希望发布addClickHandler和removeHandler的代码。
我假设您在CheckBox上保留了一个处理程序列表,因此您可以添加一些方法,如CheckBox.removeListeners,只清除列表。