Como remover MouseListener / ActionListener em um JTextfield
-
26-09-2019 - |
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?
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.