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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top