你可以考虑3种方法:
1)保存参考监听器添加它之前,所以你可以稍后将其删除:
MouseListener ml = new MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
chatInputMouseClicked(evt);
}
};
chatInput.addMouseListener (ml);
...
chatInput.removeMouseListener (ml);
2)你可以得到所有某些事件监听器采用相应的方法如:
public MouseListener[] getMouseListeners()
或
public EventListener[] getListeners(Class listenerType)
下面是first和second方法的javadoc。 如果您可以在所有听众中识别您想要移除的听众,或者您想移除所有听众,则此方法可能有所帮助。
3)你可以使用一些布尔变量来'关闭'你的监听器。但是,你应该注意到变量应该是外部类的字段:
private boolean mouseListenerIsActive;
public void doSmthWithMouseListeners() {
mouseListenerIsActive = true;
chatInput.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent evt) {
if (mouseListenerIsActive) {
chatInputMouseClicked(evt);
}
}
});
}
public void stopMouseListner() {
mouseListenerIsActive = false;
}
我宁愿第三个,因为它提供了一些灵活性,如果我想打开鼠标监听再次我不需要创造新的对象。
我通常使用第一个选项从一个组件中永久删除一个侦听器,该组件的生命周期长于注册侦听器的组件(例如在'dispose()'方法中)。 要暂时禁用侦听器,我已经使用了第三个选项。这主要是为了防止递归。例如。当触发文本更改的侦听器导致同一文本发生更改(无论出于何种原因)时,我会在侦听方法开始时禁用侦听器,并在最后启用它。 – 2010-04-13 09:13:09
我想我必须在使用它之前创建一个MouseListener。我不能删除匿名MouseListeners。 – mithun1538 2010-04-13 18:38:28