java - 如何删除 JTextField 上的 MouseListener/ActionListener

标签 java swing 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)

这里是 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/

相关文章:

java - 单击 JButton 时尝试引用 JTextField 中的文本

java - 如何从android中的静态方法调用非静态方法

Java、Swing、获取和更改所有输入字段

java - 如何在 Java 或 Groovy 中处理并发

java - 如何在 JFileChooser 中仅列出硬盘驱动器?

java - 在 JFrame 中调整 JPanel 的大小

java - JFileChooser 未显示,我的 ActionListener 有问题吗?

java - 使用单击事件隐藏 JTable 行 [ java ]

java - 同一实体上的多对多关系,无需额外的连接表列

java - 无法将 ECPublicKeyImpl 转换为 BCECPublicKey