我有以下代码将 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)
这里是 first 的 javadocs和 second方法。 如果您可以在所有监听器中确定要删除的监听器,或者如果您想要删除所有监听器,则此方法可能会有所帮助。
3) 您可以使用一些 boolean 变量来“关闭”您的监听器。但是你应该注意到变量应该是外部类的一个字段:
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;
}
我更喜欢第三个,因为它提供了一些灵 active ,如果我想再次打开鼠标监听器,我将不需要创建新对象。
关于java - 如何删除 JTextField 上的 MouseListener/ActionListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2627946/