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

public class FenetreArdoise extends JFrame {
    Ardoise ardoise;
    JLabel barreEtat; 

    public FenetreArdoise() {
	
        super("Fenêtre Ardoise");
	this.addWindowListener(new WindowAdapter() {
		public void windowClosing(WindowEvent e) { System.exit(0); }
	    });

	Container cp = this.getContentPane();
	cp.setLayout(new BorderLayout());

	ardoise = new Ardoise();
       	ardoise.setBorder(new BevelBorder(BevelBorder.LOWERED));
	ardoise.setBackground(Color.white);
	cp.add(ardoise, BorderLayout.CENTER);

        // Créer la barre d'état affichant la position du 
        // curseur et la mettre en position sud
	barreEtat= new JLabel(" ");

	ardoise.addMouseMotionListener( new MouseMotionAdapter(){
		public void mouseDragged(MouseEvent e)
		{ ... }
	});

        // Créer les objets Action
	Action effacer = new ActionEffacer();
        { ... }
        Action noir = new ActionCouleur(Color.black);
	{ ... }

        // Créer la barre des menus 
	JMenuBar barreMenu = new JMenuBar();
	this.setJMenuBar(barreMenu);     
	JMenu menuFichier = new JMenu("Fichier");
	JMenu menuCouleur = new JMenu("Couleur");
	barreMenu.add(menuFichier);
	barreMenu.add(menuCouleur);
	
        // rajouter les objets actions aux menus
	menuFichier.add(effacer);
	{ ... }

	// Créer la barre d'outils, ajouter les actions
	// et la positionner au-dessous de la barre des menus
	JToolBar barreOutil = new JToolBar();
	barreOutil.add(effacer);
	{ ... }

	// Créer une deuxième barre d'outils contenant 
	// l'ensemble des icônes des actions ActionCouleur
	// la disposer en position verticale et latérale
	JToolBar barreOutil2 = new JToolBar();
	barreOutil2.add(noir);
        { ... }
    }

    /** 
     * Définir l'ensemble des actions comme classes internes
     */

    // Action "effacer"
    class ActionEffacer extends AbstractAction {
	public ActionEffacer() {
	    super("Effacer");
	}
	public void actionPerformed(ActionEvent e) {
               ardoise.effacer(); 
            }
    }

    // Action "quitter"
    class ActionQuitter extends AbstractAction {
	public ActionQuitter() { 
          super("Quitter"); 
        }
	public void actionPerformed(ActionEvent e) 
            { ... }
    }

    // Action "définir couleur dessin"
    class ActionCouleur extends AbstractAction {
	Color couleur;
	public ActionCouleur(Color couleur) {
	    this.couleur = couleur;
	    putValue(Action.SMALL_ICON, new Icone(couleur));
	}
	public void actionPerformed(ActionEvent e)
	    { ... }
    }
    // Créer des objets Icone pour les icônes des actions 
    // ActionCouleur
    static class Icone implements Icon {
	Color couleur;
	public Icone(Color couleur){ 
              this.couleur = couleur; 
            }
	{ ... }
	}

    // Action "choisir couleur avec JColorChooser
    class ActionSelecCouleur extends AbstractAction {
	public ActionSelecCouleur(){ 
               super("Choisir couleur"); 
            }
	public void actionPerformed(ActionEvent e)
	      { ... }
    }

public static void main(String[] args) {
	FenetreArdoise fen = new FenetreArdoise();
	fen.pack();
	fen.show();
    }
}
