cómo quitar MouseListener / ActionListener en un JTextField
-
26-09-2019 - |
Pregunta
Tengo el siguiente código de la adición de un ActionListener a un JTextField:
chatInput.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
chatInputMouseClicked(evt);
}
});
Ahora, ¿cómo puedo eliminar este MouseListener usando chatInput.removeMouseListener()
, ya que esta función necesita un argumento?
Solución
Se puede considerar enfoques 3:
1) Guardar referencia a su oyente antes de añadir para que pueda quitarlo más adelante:
MouseListener ml = new MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
chatInputMouseClicked(evt);
}
};
chatInput.addMouseListener (ml);
...
chatInput.removeMouseListener (ml);
2) Usted puede obtener todo ciertos detectores de eventos con los métodos correspondientes como:
public MouseListener[] getMouseListeners()
o
public EventListener[] getListeners(Class listenerType)
Aquí están los javadocs para la primera y métodos segunda . Si puede identificar entre todos los oyentes de la que desea eliminar o si desea eliminar todos los oyentes que este enfoque puede ayudar.
3) Se puede utilizar una variable booleana que 'desactivar' a su oyente. Sin embargo, se debe notar que la variable debe ser un campo de la clase 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;
}
Yo preferiría el tercero, ya que da una cierta flexibilidad y si quiero activar el detector de ratón otra vez, no tendrá que crear nuevo objeto.