

/**** Note : Dans ce fichier vous trouverez 2 classes et une interface afin que vous puissiez lire tout le code
			d'un seul coup... Lors d'un developpement de projet, il est conseille de mettre une classe/interface 
			par fichier et de faire preceder la declaration par un modificateur generalement "public"
****/


/****
    * Classe MonBouton : 
	*			Defini un bouton de maniere tres simplifie dans le but de montrer comment mettre
	*			en place un systeme d'ecoute.
    *
    ****/

// import :
import java.util.*;
import javax.swing.*;
import javax.swing.event.EventListenerList;
import javax.swing.border.*;
import java.awt.event.*;

public class MonBouton extends JPanel implements MouseListener
{
	/****
		* Attributs :
		*
		****/
	protected EventListenerList listenerList;	// objet qui contiendra la liste des objets ecouteur
	
	/****
		* Constructeurs :
		*
		****/
	public MonBouton (String label)
	{	super ();
		this.listenerList = new EventListenerList ();
		this.setBorder (new BevelBorder (BevelBorder.RAISED));
		this.add (new JLabel (label));
		this.addMouseListener (this);
	}


	/****
		* Methodes :
		*
		****/
	// permet au "public" d'etre des objets ecouteurs
	public void addMonBoutonMouseListener (MonBoutonMouseListener l)
	{	this.listenerList.add (MonBoutonMouseListener.class, l);
	}

	// permet au "public" de ne plus etre ecouteur
	public void removeMonBoutonMouseListener (MonBoutonMouseListener l)
	{	this.listenerList.remove (MonBoutonMouseListener.class, l);
	}
	
	// lance un evenement "boutonGauchePresse" a tous les objets ecouteurs 
	protected void fireBoutonGauchePresse ()
	{	MonBoutonMouseListener [] listeners = (MonBoutonMouseListener []) listenerList.getListeners(MonBoutonMouseListener.class);

		EventObject event = new EventObject (this);
		for (int i = listeners.length-1; i>=0; i--)
		{	listeners [i].boutonGauchePresse (event);
		}
	}
	
	// lance un evenement "boutonGaucheRelache" a tous les objets ecouteurs
	protected void fireBoutonGaucheRelache ()
	{	MonBoutonMouseListener [] listeners = (MonBoutonMouseListener []) listenerList.getListeners(MonBoutonMouseListener.class);

		EventObject event = new EventObject (this);
		for (int i = listeners.length-1; i>=0; i--)
		{	listeners [i].boutonGaucheRelache (event);
		}
	}


	/****
		* Methodes de l'interface MouseListener :
		*
		****/
	public void mousePressed(MouseEvent e)
	{	// si l'evenement mousePressed est declenche par le bouton gauche alors on lance un evenement BoutonGauchePresse
		if ( SwingUtilities.isLeftMouseButton (e) )
		{	this.fireBoutonGauchePresse ();
		}
	}
	
	public void mouseReleased(MouseEvent e)
	{	// si l'evenement mouseReleased est declenche par le bouton gauche alors on lance un evenement BoutonGaucheRelache
		if ( SwingUtilities.isLeftMouseButton (e) )
		{	this.fireBoutonGaucheRelache ();
		}
	}
	
	
	public void mouseClicked(MouseEvent e)	{	}
	public void mouseEntered(MouseEvent e)	{	}
	public void mouseExited(MouseEvent e)	{	}
	
	// lance la demonstration
	public static void main (String argv [])
	{	// cree une frame et l'initialise 
		JFrame frame = new JFrame ("demo Listener");
		frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
		frame.setLocation (250, 250);
		
		// cree un bouton de notre cru et l'ajoute a la frame
		MonBouton bouton = new MonBouton ("bouton Test");
		frame.getContentPane ().add (bouton);
		
		// cree un objet ecouteur et l'ajoute a la liste de objet ecouteur de notre bouton
		Ecouteur ecouteur = new Ecouteur ();
		bouton.addMonBoutonMouseListener (ecouteur);
		
		// construit la frame et la rend visible
		frame.pack ();
		frame.setVisible (true);
	}

}

/****
    * Classe Ecouteur : 
	*			Classe cree pour la demonstration. Son but est d'afficher un message dans la console 
	*			suivant les evenements de type MonBoutonMouseListener recu 
    *
    ****/
/*public */ class Ecouteur implements MonBoutonMouseListener
{
	public Ecouteur ()
	{
	}
	
	public void boutonGauchePresse (EventObject e)
	{	System.out.println ("boutonGauchePresse");
	}
	
	public void boutonGaucheRelache (EventObject e)
	{	System.out.println ("boutonGaucheRelache");
	}
}
 



/****
    * Interface MonBoutonMouseListener : 
	*			Inteface definissant les methodes liees aux evenements que l'on souhaite gerer
    *
    ****/
/* Import necessaire :	import java.util.EventListener;
						import java.util.EventObject;*/
/*public */ interface MonBoutonMouseListener extends EventListener
{	public void boutonGauchePresse (EventObject e);
	public void boutonGaucheRelache (EventObject e);
}