import java.awt.*;
import java.awt.event.*;

import javax.swing.*;


/**
 * @author Remi Forax
 *
 */
public class MenuExample2 {

  interface ColorChanger {
    void changeColor(JComponent component,Color color);
  }

  private static JMenu createColorMenu(final JComponent component,
    String title,final ColorChanger changer) {
    
    Color[] colors=new Color[] {
      Color.RED,Color.GREEN,Color.YELLOW
    };
    String[] labels=new String[] {
      "Rouge","Vert","Jaune"
    };
      
    JMenu menu=new JMenu(title);
    ButtonGroup group=new ButtonGroup();
    
    for(int i=0;i<colors.length;i++) {
      final Color color=colors[i];
      JCheckBoxMenuItem item=new JCheckBoxMenuItem(labels[i]);
      item.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent event) {
          changer.changeColor(component,color);
        }
      });
      menu.add(item);
      group.add(item);
    }
    
    return menu;
  }

  public static void main(String[] args) {
    
    JMenu edit=new JMenu("Edit");
    
    JButton button=new JButton("Hello Menu");
    edit.add(createColorMenu(button,"couleur d'arrière plan",new ColorChanger() {
      public void changeColor(JComponent component, Color color) {
        component.setBackground(color);
      }
    }));
    edit.add(createColorMenu(button,"couleur d'avant plan",new ColorChanger() {
      public void changeColor(JComponent component, Color color) {
        component.setForeground(color);
      }
    }));
    
    JPanel panel=new JPanel();
    panel.add(button);
    
    JMenuBar bar=new JMenuBar();
    bar.add(edit);
    
    JFrame frame=new JFrame();
    frame.setJMenuBar(bar);
    frame.setContentPane(panel);
    frame.setSize(400,300);
    frame.show();
  }
}
