package com.llgc.vue; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.util.EnumSet; import java.util.Observable; import java.util.Observer; import javax.swing.AbstractAction; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; import com.llgc.ctrl.CtrlNombre; import com.llgc.modele.MdlNombre; import com.llgc.modele.MdlNombre.ChangeNombre; public class Fenetre extends JFrame implements Observer { private static final long serialVersionUID = 2474983998400143732L; private CtrlNombre ctrl; private JTextField bt; // La fenêtre communique au contrôleur les modifications. public Fenetre(CtrlNombre ctrl) { super(); this.ctrl = ctrl; // IHM ultra simple. getContentPane().setLayout(new BorderLayout()); JPanel pnl2 = new JPanel(); pnl2.add(new JButton(new ActionChangeNombre("Modifier"))); bt = new JTextField(25); pnl2.add(bt); getContentPane().add(pnl2); pack(); setVisible(true); } // Informations reçues de la part du modèle @Override public void update(Observable o, Object arg) { if (o instanceof MdlNombre) { MdlNombre nb = (MdlNombre)o; // Il n'est pas possible de caster un Object vers un EnumSet sans warning. @SuppressWarnings("unchecked") EnumSet cg = (EnumSet)arg; // Traitement des modifications. // Ici, on se contente d'afficher les modif dans la console. System.out.println(nb.getNombre()); for (ChangeNombre iterable_element : cg) { System.out.println(iterable_element.toString()); } } } // Événement associé au bouton changeant la valeur du nombre. private class ActionChangeNombre extends AbstractAction { private static final long serialVersionUID = 4927921822320583419L; public ActionChangeNombre(String name) { super(name); } @Override public void actionPerformed(ActionEvent arg0) { // Le contrôleur communique avec l'IHM uniquement via le code retour. // Si true, le contrôleur a transmis la demande au modèle qui l'a traité avec succès. // false si le contrôleur n'a pas transmis la demande au modèle ou // si le modèle a rejeté la demande de modification. // Il est préférable en cas de refus que la notification vienne du contrôleur // sinon, c'est tous les utilisateurs qui seront notifiés de l'échec et pas uniquement // le demandeur. if (!ctrl.setNombre(bt.getText())) { System.out.println(bt.getText() + " est incorrect."); } } } }