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

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

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

有帮助吗?

解决方案

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top