comment supprimer MouseListener / ActionListener sur un terrain de Jtext

<!-J'ai le code suivant pour ajouter un ActionListener à un JTextField:

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

maintenant, comment puis-je supprimer ce MouseListener en utilisant chatInput.removeMouseListener(), puisque cette fonction a besoin d'un argument?

9
demandé sur Roman 2010-04-13 12:14:04

1 réponses

Vous pouvez envisager de 3 approches:

1) sauvegardez la référence de votre auditeur avant de l'Ajouter pour pouvoir la supprimer plus tard:

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

2) Vous pouvez obtenir tous certains écouteurs d'événements avec des méthodes correspondantes comme:

public MouseListener[] getMouseListeners()  

ou

public EventListener[] getListeners(Class listenerType)

Voici la javadoc premier et deuxième méthodes. Si vous pouvez identifier parmi tous les auditeurs celui sur lequel vous souhaitez supprimer, ou si vous voulez supprimer tous les auditeurs cette approche peut aider.


3) vous pouvez utiliser une variable booléenne qui "éteindra" votre auditeur. Mais vous devriez remarquer que la variable devrait être un champ de la classe externe:

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;
}

je préférerais le troisième parce qu'il donne une certaine flexibilité et si je veux relancer l'écouteur de souris je n'aurai pas besoin de créer un nouvel objet.

18
répondu Roman 2010-04-13 08:30:34