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".
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;
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); }
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); } }
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; }
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 !"); } }