如何在JTextField上删除MouseListener / ActionListener

我有以下代码将ActionListener添加到JTextField:

chatInput.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { chatInputMouseClicked(evt); } }); 

现在如何使用chatInput.removeMouseListener()删除此MouseListener,因为此函数需要参数?

您可以考虑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) 

以下是第一种和第二种方法的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; } 

我更喜欢第三个,因为它提供了一些灵活性,如果我想再次打开鼠标监听器,我将不需要创建新对象。