Exemple IPM 00

package demo_ipm;

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

interface Arrêtable {
   void arrêter();
}

public class FenêtrePrincipale extends JFrame implements Arrêtable {
   private static final long serialVersionUID = 0;

   public FenêtrePrincipale() {
      super("Démonstrateur d'interface personne/ machine");
      m_PositionCourante = null;
   }

   private class ExamineuxMenu implements ActionListener {
      private PanneauContenu m_Destination;
      private void setDestination(PanneauContenu Destination) {
         m_Destination = Destination;
      }
      private PanneauContenu getDestination() {
         return m_Destination;
      }
      public ExamineuxMenu(PanneauContenu Destination) {
         setDestination(Destination);
      }
      public void actionPerformed(ActionEvent ae) {
         getDestination().afficherMessage(ae.getActionCommand());
      }
   }

   private JMenuItem créerMenuItem(String nom) {
      JMenuItem mnu = new JMenuItem(nom);
      mnu.addActionListener(new ExamineuxMenu(m_Contenu));
      return mnu;
   }

   private JMenu créerMenuFichier() {
      JMenu mnu = new JMenu("Fichier");
      mnu.add(créerMenuItem("Nouveau"));
      mnu.add(créerMenuItem("Ouvrir"));
      mnu.add(créerMenuItem("Fermer"));
      JMenuItem mnuQuitter = new JMenuItem("Quitter");
      mnuQuitter.addActionListener(new GestionnaireFermeture(this));
      mnu.add(mnuQuitter);
      return mnu;
   }
   private JMenu créerMenuÉdition() {
      JMenu mnu = new JMenu("Édition");
      mnu.add(créerMenuItem("Couper"));
      mnu.add(créerMenuItem("Copier"));
      mnu.add(créerMenuItem("Coller"));
      return mnu;
   }
   private JMenu créerMenuAffichage() {
      JMenu mnu = new JMenu("Affichage");
      mnu.add(créerMenuItem("Peu importe"));
      return mnu;
   }
   private JMenu créerMenuAide() {
      JMenu mnu = new JMenu("?");
      mnu.add(créerMenuItem("Au secours!"));
      mnu.addSeparator();
      mnu.add(créerMenuItem("À propos de..."));
      return mnu;
   }

   private JMenuBar créerMenus() {
      JMenuBar Menus = new JMenuBar();
      Menus.add(créerMenuFichier());
      Menus.add(créerMenuÉdition());
      Menus.add(créerMenuAffichage());
      Menus.add(créerMenuAide());
      return Menus;
   }

   //
   // Composants visuels
   //
   private JLabel m_PositionCourante;
   private PanneauContenu m_Contenu;

   private class PanneauContenu extends JPanel {
      private static final long serialVersionUID = 0;
      private JLabel m_Info;
      public PanneauContenu() {
         m_Info = new JLabel(" ");
         setLayout(new BorderLayout());
         add(m_Info, BorderLayout.CENTER);
      }
      public void afficherMessage(String msg) {
         m_Info.setText(msg);
      }
   }

   private void init() {
      getContentPane().setLayout(new BorderLayout());
      //
      // Créer la section sud
      //
      JPanel SectionSud = new JPanel();
      getContentPane().add(SectionSud, BorderLayout.SOUTH);
      SectionSud.setLayout(new GridLayout(1, 3));
      SectionSud.add(new JLabel("Que c'est chic!", JLabel.LEFT));
      SectionSud.add(new JLabel("Full cool!", JLabel.CENTER));
      //
      // Pour suivre la position de la souris (police non
      // proportionnelle, pour donner un exemple de Font)
      //
      {
         //
         // bloc local pour limiter la portée de la variable «f»
         //
         m_PositionCourante = new JLabel(" ", JLabel.RIGHT);
         Font f = new Font("Courier New", Font.ITALIC, 12);
         m_PositionCourante.setFont(f);
         SectionSud.add(m_PositionCourante);
         addMouseMotionListener(new SuiveuxDeRat(m_PositionCourante));
      }
      //
      // Créer la section centrale
      //
      JPanel SectionPrincipale = new JPanel();
      SectionPrincipale.setLayout(new BorderLayout());
      //
      // Zone des pitons
      //
      JPanel SectionPitons = new JPanel();
      final int NB_PITONS = 6;
      SectionPitons.setLayout(new GridLayout(NB_PITONS, 1));
      JButton[] Pitons = new JButton[NB_PITONS];
      for (int i = 0; i < Pitons.length; ++i) {
         Pitons[i] = new JButton("Piton " + i);
         SectionPitons.add(Pitons[i]);
      }
      SectionPrincipale.add(SectionPitons, BorderLayout.WEST);
      //
      // Espace client
      //
      m_Contenu = new PanneauContenu();
      SectionPrincipale.add(m_Contenu, BorderLayout.CENTER);
      getContentPane().add(SectionPrincipale, BorderLayout.CENTER);
      //
      // Le menu
      //
      setJMenuBar(créerMenus());
   }

   public void arrêter() {
      boolean DoitQuitter;
      switch (JOptionPane.showConfirmDialog(
                  this, "Voulez-vous vraiment quitter?",
                  "Confirmation", JOptionPane.YES_NO_OPTION)) {
         case JOptionPane.YES_OPTION:
            DoitQuitter = true;
            break;
         case JOptionPane.NO_OPTION:
         default:
            DoitQuitter = false;
      }
      if (DoitQuitter) {
         System.exit(0);
      }
   }

   private static class GestionnaireFermeture
      extends WindowAdapter implements ActionListener {
      private Arrêtable m_Propriétaire;
      private void setPropriétaire(Arrêtable Propriétaire) {
         m_Propriétaire = Propriétaire;
      }
      private Arrêtable getPropriétaire() {
         return m_Propriétaire;
      }
      public GestionnaireFermeture(Arrêtable Propriétaire) {
         setPropriétaire(Propriétaire);
      }
      public void windowClosing(WindowEvent we) {
         getPropriétaire().arrêter();
      }
      public void actionPerformed(ActionEvent ae) {
         getPropriétaire().arrêter();
      }
   }

   private static class SuiveuxDeRat implements MouseMotionListener {
      private JLabel m_LieuAffichage;
      public SuiveuxDeRat(JLabel LieuAffichage) {
         setLieuAffichage(LieuAffichage);
      }
      private void setLieuAffichage(JLabel LieuAffichage) {
         m_LieuAffichage = LieuAffichage;
      }
      private JLabel getLieuAffichage() {
         return m_LieuAffichage;
      }
      public void mouseDragged(MouseEvent me) {
      }
      public void mouseMoved(MouseEvent me) {
         getLieuAffichage().setText("{ " + me.getX() + ", " + me.getY() + " }");
      }
   }

   public static void main(String [] args) {
      FenêtrePrincipale fp = new FenêtrePrincipale();
      fp.init();
      fp.pack();
      fp.addWindowListener(new GestionnaireFermeture(fp));
      fp.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
      fp.setVisible(true);
   }
}