Boîte de message

La classe MsgBox

Cette classe représente une boîte de dialogue destinée à afficher un message et contenant un bouton "OK" seul ou accompagné par un bouton "Annule".

Déclarations

MsgBox dérive de la classe Dialog. La variable id permettra de déterminer avec quel bouton la boîte de dialogue a été refermée par l'utilisateur.

        import java.awt.*;
        import java.awt.event.*;

        class MsgBox extends Dialog implements ActionListener {
         boolean id=false;  //permet de connaître le bouton utilisé
         Button ok,can;

Constructeur

Le constructeur fait d'abord appel au constructeur hérité de la classe Dialog. Il est pour cela nécessite d'indiquer quel objet de type Frame sera parent de la boîte de dialogue. On insère ensuite un Label initialisé avec le paramètre msg pour le message, puis un ou deux boutons selon la valeur du paramètre okcan. On termine en affichant la boîte de dialogue.

         MsgBox(Frame fr, String msg, boolean okcan) {
          //constructeur hérité
          super(fr, "Message", true);
          //gestionnaire de positionnement
          setLayout(new BorderLayout());
          //ligne de message
          add(BorderLayout.CENTER,new Label(msg,Label.CENTER));
          //boutons
          Panel p=new Panel();
          p.setLayout(new FlowLayout());
          ok=new Button(" OK ");
          p.add(ok);
          ok.addActionListener(this); 
          if (okcan) {
           can=new Button("Annule");
           p.add(can);
           can.addActionListener(this);
          }
          add(BorderLayout.SOUTH,p);
          //dimensions et positionnement
          pack();
          Dimension d=getToolkit().getScreenSize();
          setLocation(d.width/3,d.height/3);
          //affichage
          setVisible(true);
         }

Gestion des évènements liés aux boutons

L'appui sur un bouton va fermer la boîte de dialogue en la rendant invisible. Le bouton "OK" mettra le champ id à true et le bouton "Annule" le mettra à false.

         public void actionPerformed(ActionEvent e) {
          if(e.getSource()==ok) {
           id=true;
           setVisible(false);
          }
          else if(e.getSource()==can) {
           id=false;
           setVisible(false);
          }
         }

Deux méthodes statiques utiles

Les deux méthodes affMsg et affQuest facilitent l'utilisation de la classe MsgBox. La méthode affMsg affiche un message avec le bouton "OK" seul. La méthode affQuest affiche un message avec les boutons "OK" et "Annule", elle renvoie true si le bouton "OK" a été utilisé et false dans les autres cas.

         public static void affMsg(Frame fr, String msg) {
          MsgBox message=new MsgBox(fr, msg, false);
          message.dispose();
         }
 
         public static boolean affQuest(Frame fr, String msg) {
          MsgBox message=new MsgBox(fr, msg,true);
          boolean rep=message.id;
          message.dispose();
          return rep;
         }

Exemple d'utilisation dans une applet

Ecrivons une applet contenant uniquement un bouton provoquant l'affichage d'une boîte de message.

Le problème est de trouver l'objet de classe Frame qui sera parent de la boîte de dialogue. On l'obtient en utilisant la méthode getParent jusqu'à ce qu'elle fournisse effectivement un objet de classe Frame.

        import java.awt.*;
        import java.awt.event.*;
        import java.applet.*;

        public class MsgBoxDemo extends Applet 
         implements ActionListener {
  
         public void init() {
          setLayout(new BorderLayout());
          Button b=new Button(" Message ");
          b.addActionListener(this);
          add(BorderLayout.CENTER,b);
         }
 
         public void actionPerformed(ActionEvent e) { 
          //on cherche un objet de type Frame contenant l'applet
          Frame fr=null;
          Component parentCourant=this;
          while (parentCourant!=null && fr==null) {
           if (parentCourant instanceof Frame) fr=(Frame)parentCourant;
           else parentCourant=parentCourant.getParent();
          } 
          MsgBox.affMsg(fr, "Bonjour dans une boîte de message !");
         }
    
        }



Retour au menu