Crear nuestro propio Listener

2090 vistas

Caso representativo:
In componente dado tiene la necesidad de informar a uno o varios componentes que se ahn producido ciertos eventos.

Un pequeño ejemplo:
El componente MiBoton tiene que informar a una lista de objetos que se ha pulsado y soltado el botón izquierdo del ratón.

Definir una nueva interfaz:



java
  1. public interface MiBotonMouseListener extends EventListener {
  2.         public void botonIzqPulsado (EventObject e);
  3.         public void botonIzqSoltado (EventObject e);
  4. }



class miBoton:



java
  1. /** import necesario */
  2. import javax.swing.event.EventListenerList;
  3. /** propiedad */
  4. protected EventListenerList listenerList;
  5. /** instanciación necesaria: a realizar en el constructor o en un método llamado por éste */
  6. this.listenerList = new EventListenerList ();
  7. /** añade un componente a una lista de los que quieren ser informados */
  8. public void addMiBotonMouseListener (MiBotonMouseListener l) {
  9.         this.listenerList.add (MiBotonMouseListener.class, l);
  10. }
  11. /** quita un objeto que está actualmente a la escucha del evento */
  12. public void removeMiBotonMouseListener (MiBotonMouseListener l) {
  13.         this.listenerList.remove (MiBotonMouseListener.class, l);
  14. }
  15. /** lanzar un evento a todos los objetos a la escucha
  16.  * (== llamar al método botonIzqPulsado sobre todos los objetos a la escucha de la lista */
  17. protected void firebotonIzqPulsado () {
  18.         MiBotonMouseListener [] listeners = (MiBotonMouseListener [])
  19.                 listenerList.getListeners( MiBotonMouseListener.class);
  20.         EventObject e = new EventObject (this);
  21.         for (int i = listeners.length-1; i>=0; i--) {
  22.                 listeners [i].botonIzqPulsado (e);
  23.         }
  24. }



Ahora sólo queda llamar éste método cada vez que el evento apropiado se genere.