您可以考虑以下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方法的Java文档。
如果您能够在所有监听器中识别出您想要删除的监听器,或者如果您想要删除所有监听器,则此方法可能有所帮助。
Great! I'm happy to help. What text do you need translated?
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()
方法中)。为了暂时禁用监听器,我使用了第三种选项。这在大多数情况下是为了防止递归。例如,当在文本更改时触发监听器导致同一文本的更改(无论什么原因),我会在其监听方法的开头禁用监听器,在结尾处启用它。 - Christian Semrau