Question

Je le code suivant l'ajout d'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 cette MouseListener en utilisant chatInput.removeMouseListener(), car cette fonction a besoin d'un argument?

Était-ce utile?

La solution

Vous pouvez considérer 3 approches:

1) Enregistrer référence à votre écoute avant de l'ajouter afin que vous puissiez le 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 les certains écouteurs d'événements avec des méthodes correspondantes comme:

public MouseListener[] getMouseListeners()  

ou

public EventListener[] getListeners(Class listenerType)

Voici les javadocs pour première et deuxième méthodes . Si vous pouvez identifier parmi tous les auditeurs celui que vous souhaitez supprimer ou si vous voulez supprimer tous les auditeurs cette approche peut aider.


3) Vous pouvez utiliser une variable booléenne qui 'éteignez votre auditeur. Mais vous remarquerez que la variable doit ê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 que le troisième parce qu'il donne une certaine souplesse et si je veux allumer l'auditeur de la souris à nouveau je ne vais pas besoin de créer un nouvel objet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top