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);
}
}