Pergunta

Eu tenho o seguinte código adicionando um ActionListener a um JTextfield:

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

Agora, como faço para remover este mouselistener usando chatInput.removeMouseListener(), já que essa função precisa de um argumento?

Foi útil?

Solução

Você pode considerar 3 abordagens:

1) Salve a referência ao seu ouvinte antes de adicioná -lo para que você possa removê -lo mais tarde:

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

2) Você pode obter todos os ouvintes de eventos com métodos correspondentes como:

public MouseListener[] getMouseListeners()  

ou

public EventListener[] getListeners(Class listenerType)

Aqui estão os javadocs para o primeiro e segundo métodos. Se você conseguir identificar entre todos os ouvintes, o que deseja remover ou se deseja remover todos os ouvintes, essa abordagem pode ajudar.


3) Você pode usar alguma variável booleana que 'desativará' seu ouvinte. Mas você deve notar que a variável deve ser um campo da classe externa:

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

Eu preferiria o terceiro porque dá alguma flexibilidade e, se eu quiser ligar o ouvinte do mouse novamente, não precisarei criar um novo objeto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top