// -*- Coding: utf-8 -*-
// Time-stamp: <BackgrdButton0.java   7 déc 2015 08:58:26>

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

/**
 * Fenêtre avec trois boutons pour changer la couleur de fond.
 * @author O. Carton
 * @version 1.0
 */
class BackgrdButton0 extends JFrame {
    final int width  = 300;	// Largeur de la fenêtre
    final int height = 200;	// Hauteur de la fenêtre
    public BackgrdButton0 () {
	// Dimension de la fenêtre
	setSize(width, height);
	// Titre de la fenêtre
	setTitle("Changement de fond par boutons");
	// Action à faire lorsque la fenêtre est fermée.
	setDefaultCloseOperation(EXIT_ON_CLOSE);
	// Panneau de contenu de la fenêtre
	Container contentPane = getContentPane();
	// Ajout du panel contenant les trois boutons
	contentPane.add(new ButtonPanel());
    }
    public static void main(String [] args)
    {
	// Création de la fenêtre
	BackgrdButton0 bg = new BackgrdButton0();
	// Affichage de la fenêtre
	bg.setVisible(true);
    }
}

/**
 * Panneau contenant les trois boutons
 */
class ButtonPanel extends JPanel {
    // Ajout d'un bouton à partir du titre et de la couleur
    private void addButton(String name, final Color c) {
	// Création du bouton 
	JButton button = new JButton(name);
	// Action associée au bouton.
	// L'action est réalisée par un object qui implémente l'interface 
	// ActionListener.  Cette interface déclare une méthode 
	// actionPerformed qui est appelée lorsque le bouton est activé par 
	// l'utilisateur. 
	button.addActionListener(new Listener(this, c));
	// Ajout du bouton au panel.
	add(button);
    }
    public ButtonPanel () {
	// Création d'un bouton pour chaque couleur
	addButton("Rouge", Color.red);
	addButton("Vert", Color.green);
	addButton("Bleu", Color.blue);
   }
}

// Classe externe pour recevoir les événements.
class Listener implements ActionListener {
    // Constructeur
    Listener(JPanel p, Color c) { panel = p; color = c; }
    // Méthode d'interaction
    public void actionPerformed(ActionEvent event) {
	// Changement de la couleur du fond
	panel.setBackground(color);
	// Actualisation de la fenêtre
	panel.repaint();
    }
    // Champs
    private JPanel panel;
    private Color color;
}