繁体   English   中英

如何在JTextField上删除MouseListener / ActionListener

[英]how to remove MouseListener / ActionListener on a JTextField

我有以下代码将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;
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM