import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.event.*;

/**Classe MiniDraw de type applet qui affiche un gros bouton en haut, une zone centrale de dessin encadré 
 *et un groupe de petits bouttons en bas, 4 à choisir et 1 à cocher
 *L'appui sur les bouttons affiche un texte selon le bouton dans la console java du navigateur.
 *Les mouvements et les clics de la souris sont aussi gérés et donnent lieu à un affichage dans la console java.
 *
 *@author Juien Eynard et Florian Delclaux
 *@version Tp2 2_6_Gestion_Souris
 */

public class MiniDraw4 extends JApplet implements ActionListener, MouseListener, MouseMotionListener

{
   /**Container général pour mettre les différents objets de l'applet*/
    Container zone=getContentPane();

    /**Bordure pour la zone de dessin*/
    Border Line = BorderFactory.createLineBorder(Color.blue);

    /**Bouton pour le choix de la couleur*/
    JButton button =new JButton ("choisir une couleur");

    /**Zone de dessin*/
    JPanel dessin= new JPanel();

   /**Bouton pour le choix de la couleur*/
    JPanel buttonPanel=new JPanel();

    /*création de radion boutons*/
    /**Bouton pour faire un cercle*/
    JRadioButton buttonA =new JRadioButton("Cercle",false);

    /**Bouton pour faire une ellipse*/
    JRadioButton buttonB =new JRadioButton("Ellipse",false);

    /**Boutton pour faire un rectangle*/
    JRadioButton buttonC =new JRadioButton("Rectangle",false);

    /**Bouton pour faire un carré*/
    JRadioButton buttonD =new JRadioButton("Carré",false);

    /**Bouton à cocher pour créer des formes remplies ou non*/
    JCheckBox filled= new JCheckBox("Rempli");

   /** Méthode qui initialise l'applet:
     * On rajoute les boutons de choix de forme et remplir dans une zone de boutons et on ajoute cette zone, ainsi qu'une zone de dessin plus le bouton de choix de la couleur dans un container que l'on affiche.
     * Les radio bouttons sont groupés afin de ne pouvoir en selectionner qu'un seul.
     * La zone de dessin se voit attribuée une bordure.
     * On ajoute des écouteurs sur chacun des boutons ainsi que sur la souris lorsqu'elle se trouve dans la zone de dessin afin de pouvoir récupérer ses clics et ses mouvements
     * 
     */
    public  void init()
    {

    //ajout du bouton choix d'une couleur en haut de l'applet
    zone.add(button,BorderLayout.NORTH);

    //zone de dessin
    dessin.setBorder(Line);//ajout d'une bordure à notre zone de dessin
    zone.add(dessin,BorderLayout.CENTER);//ajout de notre zone de dessin au centre de l'applet

    //zone radioboutton
    ButtonGroup group = new ButtonGroup();//création d'un groupe de boutton (action associé)

    /*l'action des boutons est groupée : on ne peut en sélectionner q'un à la fois*/
    group.add(buttonA);//association d'un bouton radio au groupe de radio bouton
    group.add(buttonB);//association d'un bouton radio au groupe de radio bouton
    group.add(buttonC);//association d'un bouton radio au groupe de radio bouton
    group.add(buttonD);//association d'un bouton radio au groupe de radio bouton

    /*on affiche les boutons*/

    buttonPanel.add(buttonA);//ajout d'un bouton dans une zone de bouton du bas
    buttonPanel.add(buttonB);//ajout d'un bouton dans une zone de bouton du bas
    buttonPanel.add(buttonC);//ajout d'un bouton dans une zone de bouton du bas
    buttonPanel.add(buttonD);//ajout d'un bouton dans une zone de bouton du bas
    buttonPanel.add(filled);//ajout d'un bouton dans une zone de bouton du bas

    zone.add(buttonPanel,BorderLayout.SOUTH);//ajout de la zone de bouton au bas de l'applet

    setContentPane(zone);//chargement du container contenant tous les éléments graphiques

    /*Ajout d'écouteur sur les boutons de l'applet*/
    button.addActionListener(this);//on ajoute un écouteur sur le bouton pour le choix de la couleur
    buttonA.addActionListener(this);//on ajoute un écouteur sur le bouton créer un cercle
    buttonB.addActionListener(this);//on ajoute un écouteur sur le bouton créer une ellipse
    buttonC.addActionListener(this);//on ajoute un écouteur sur le bouton créer un rectangle
    buttonD.addActionListener(this);//on ajoute un écouteur sur le bouton créer un carré
    filled.addActionListener(this);//on ajoute un écouteur sur le bouton remplir


    /*Ajout d'une fonctionnalité qui gère les clics de la souris dans la zone de dessin*/
    dessin.addMouseListener(this);

    /*Ajout d'une fonctionalité qui gère les mouvements de la souris dans la zone de dessin*/
    dessin.addMouseMotionListener(this);

    }

    /**Méthode pour exécuter des actions sur les boutons que l'on coche : affichage d'un texte dans la console java
    * @param e : une action qui est détecté sur un des boutons
    * 
    * * */

     public void actionPerformed(ActionEvent e)
     {
        Object source=e.getSource();//on récupère la source de l'évènement

        if(source==button)//action a appliquer si on appuie sur le bouton changer de couleur
            {
            System.out.println("on click sur le bouton changer de couleur");//affichage d'un message dans la console java
            }

        else if(source==buttonA)//action a appliquer si on appuie sur le bouton radio cercle
            {
            System.out.println("on click sur le bouton creer un cercle");//affichage d'un message dans la console java
            }

        else if(source==buttonB)//action a appliquer si on appuie sur le bouton radio ellipse
            {
            System.out.println("on click sur le bouton creer une ellipse");//affichage d'un message dans la console java
            }

        else if(source==buttonC)//action a appliquer si on appuie sur le bouton radio rectangle
            {
            System.out.println("on click sur le bouton creer un rectangle");//affichage d'un message dans la console java
            }

        else if(source==buttonD)//action a appliquer si on appuie sur le bouton radio carré
            {
            System.out.println("on click sur le bouton creer un carré");//affichage d'un message dans la console java
            }

        else if(source==filled)//action a appliquer si on coche ou non le bouton rempli
            {
            if(filled.isSelected())
                {
                System.out.println("on coche le bouton remplir la forme");//affichage d'un message dans la console java
                }
            else //action a appliquer si on décoche le bouton rempli
                {
                System.out.println("on décoche le bouton remplir la forme");//affichage d'un message dans la console java
                }

                }
    }

    /**Méthode pour informer l'utilisateur qu'il a pressé la souris sans la relacer : affichage d'un texte dans la console java
    * @param e : evenement d'une pression sur le bouton de la souris détecté sur la zone de dessin
    * 
    * */
    public void mousePressed(MouseEvent e)
    {
    System.out.println("pressed");//affichage d'un message dans la console java
    }

    /**Méthode pour informer l'utilisateur qu'il a relaché la souris : affichage d'un texte dans la console java
    * @param e : evenement d'un relachement sur le bouton de la souris détecté sur la zone de dessin
    * 
    * */
    public void mouseReleased(MouseEvent e)
    {
    System.out.println("release");//affichage d'un message dans la console java
    }

    /**Méthode pour informer l'utilisateur qu'il a cliqué avec la souris : affichage d'un texte dans la console java
    * @param e : evenement d'un clic sur le bouton de la souris détecté sur la zone de dessin
    * 
    * */
    public void mouseClicked(MouseEvent e)
    {
    System.out.println("click");//affichage d'un message dans la console java
    }

    /**Méthode pour informer l'utilisateur que la souris est entrée dans la zone de dessin : affichage d'un texte dans la console java
    * @param e : evenement sur le pointeur de la souris détecté (entrant) dans la zone de dessin
    * 
    * */
    public void mouseEntered(MouseEvent e)
    {
    System.out.println("enter");//affichage d'un message dans la console java
    }

    /**Méthode pour informer l'utilisateur que la souris est sortié de la zone de dessin : affichage d'un texte dans la console java
    * @param e : evenement sur le pointeur de la souris détecté (sortant) dans la zone de dessin
    * 
    * */
    public void mouseExited(MouseEvent e)
    {
    System.out.println("exit");//affichage d'un message dans la console java
    }

      /**Méthode pour informer l'utilisateur de la position de la souris dans la zone de dessin : affichage d'un texte dans la console java qui donne la position (x,y)
     * @param e : evenement sur la position du pointeur de la souris détecté dans la zone de dessin
     * 
     * */
    public void mouseMoved(MouseEvent e)
    {
    System.out.println("position:("+e.getX()+","+e.getY()+")");//affichage de la position du curseur dans la console java
    }

      /**Méthode pour informer l'utilisateur de la position de la souris enfoncée dans la zone de dessin : affichage d'un texte dans la console java qui donne la position (x,y)
     * @param e : evenement sur la position du pointeur enfoncé de la souris détecté dans la zone de dessin
     * 
     * */
    public void mouseDragged(MouseEvent e)
    {
    System.out.println("dragged:("+e.getX()+","+e.getY()+")");//affichage de la position du curseur dans la console java
    }

}
