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


public class DesGribouillis2 extends JFrame {
    JPanel canvas = new JPanel();
    Color  brush_color = Color.black;
    private int last_x, last_y;
    
    public static void main(String argv[]) {
	DesGribouillis2 toplevel = new DesGribouillis2();
	// initialiser la disposition et rendre visible
	toplevel.pack();
	toplevel.show();
    }

    public DesGribouillis2() {
	setTitle("DesGribouillis2");
	Container contentPane = getContentPane();
	//NB: Layout par defaut de contentPane: BorderLayout 

	// Zone de dessin : fond blanc
	canvas.setBackground(Color.white);

	// Affecter une taille par defaut
	Dimension dim = new Dimension(400, 400);
	canvas.setPreferredSize(dim);
	
	// mettre au centre du 'contentPane' 
	contentPane.add(BorderLayout.CENTER, canvas);
	
	// Definir, instancier et enregistrer le MouseListener
	// (en utilisant les "inner classes" et les "adapters"
	canvas.addMouseListener(new MouseAdapter() {
		public void mousePressed(MouseEvent e) {
		    last_x = e.getX();
		    last_y = e.getY();
		}
	    });
	
	// Definir, instancier et enregistrer le  MouseMotionListener
	canvas.addMouseMotionListener(new MouseMotionAdapter() {
		public void mouseDragged(MouseEvent e) {
		    Graphics g = canvas.getGraphics();
		    g.setColor(brush_color);
		    int x = e.getX();
		    int y = e.getY();
		    g.drawLine(last_x, last_y, x, y);
		    last_x = x;
		    last_y = y;
		}
	    });
	

	// Panel contenant les RadioButtons qui changent la couleur
	// du background
	JPanel panel1 = new JPanel(); 
	contentPane.add(BorderLayout.SOUTH, panel1);

	// cet objet rendra les RadioButtons exclusifs
	ButtonGroup bgroup1 = new ButtonGroup();

	// ajouter chaque bouton au panel pour qu'il s'affiche
	panel1.add(new JLabel("Background Color: "));
	panel1.add(new BgButton("Noir",  bgroup1, Color.black));
	panel1.add(new BgButton("White", bgroup1, Color.white));
	panel1.add(new BgButton("Jaune", bgroup1, Color.yellow));
	panel1.add(new BgButton("Rouge", bgroup1, Color.red));
	panel1.add(new BgButton("Vert",  bgroup1, Color.green));


	// Panel contenant les RadioButtons qui changent la couleur
	// du foreground
	JPanel panel2 = new JPanel(); 
	contentPane.add(BorderLayout.NORTH, panel2);

	// cet objet rendra les RadioButtons exclusifs
	ButtonGroup bgroup2 = new ButtonGroup();

	// ajouter chaque bouton au panel pour qu'il s'affiche
	panel2.add(new JLabel("Foreround Color: "));
	panel2.add(new FgButton("Noir",  bgroup2, Color.black));
	panel2.add(new FgButton("White", bgroup2, Color.white));
	panel2.add(new FgButton("Jaune", bgroup2, Color.yellow));
	panel2.add(new FgButton("Rouge", bgroup2, Color.red));
	panel2.add(new FgButton("Vert",  bgroup2, Color.green));
    }


    // classe de boutons qui changent la couleur de la zone de dessin

    class BgButton extends JRadioButton {    // classe imbriquee
	Color color;

	public BgButton(String name, ButtonGroup bgroup, Color _color) {
	    super(name);
	    color = _color;
	    
	    // ajouter chaque bouton au RadioGroup pour le rendre exclusif
	    bgroup.add(this);
	    
	    // A COMPLETER:
	    // rendre le boutton actif de telle sorte qu'il change la
	    // couleur du background du canvas
	    //......
	}
    }


    // classe de boutons qui changent la couleur du pinceau

    class FgButton extends JRadioButton {    // classe imbriquee
	Color color;

	public FgButton(String name, ButtonGroup bgroup, Color _color) {
	    super(name);
	    color = _color;

	    // ajouter chaque bouton au RadioGroup pour le rendre exclusif
	    bgroup.add(this);
	    
	    // A COMPLETER:
	    // rendre le boutton actif de telle sorte qu'il change
	    // 'brush_color' (la couleur du trace)
	    //......
	}
    }
}


