On peut envisager plusieurs manières pour la transmission des paramètres saisis dans une boîte de dialogue vers l'objet appelant.
Rappel : Une boîte de dialogue (javax.swing.JDialog
) peut être montrée ou cachée par setVisible (true/false) et doit être détruite après utilisation par dispose ().
Remarque : La classe capsis.kernel.GDialog
propose des méthodes facilitant la procédure décrite en 3. En sous-classant cette classe abstraite, on hérite de la méthodes setValidDialog (boolean b)
qui permet de déclarer la validation / annulation avant de sortir sur Ok ou Annuler, et de la méthode isValidDialog ()
qui permet à l'appelant de contrôler la validation.
Remarque : avant de rendre la main, la boîte de dialogue peut s'effacer de l'écran sans se détruire en utilisant le méthode setVisible (false) de Component.
Il est conseillé de préférer les méthodes 3. et 1. dans cet ordre.
Il existe plusieurs variantes pour gérer l'interception des évènements émis par les composants graphiques d'une boîte de dialogue (boutons, listes,etc…). Cette section propose une solution simple et compacte, qui a été utilisée systématiquement pour le développement du pilote interactif gui.
Le principe est que la boîte de dialogue gère les évènements levés par ses composants. Tous les composants pouvant être activés sont déclarés comme des variables d'instances privées de la boîte :
private JButton browse;
Lors de leur instanciation, leur ActionListener (ou ItemListener… : dépend du type de composant : cf “Au coeur de Java - vol I - Notions fondamentales”, p. 343 et 344) est désigné comme étant la boîte de dialogue elle même :
browse = new JButton (Translator.swap ("d1.browse")); browse.addActionListener (this);
Enfin, le composant est ajouté dans un JPanel, lui même ajouté dans le contentPane de la boîte de dialogue considérée :
p2.add (browse); getContentPane ().add (p2, "Center");
La classe décrivant la boîte de dialogue est une sous-classe de javax.swing.JDialog ou de capsis.kernel.GDialog et elle doit implémenter les interfaces correspondant à l'interception des évènements déclenchables par ses composants :
public class DNewSession extends GDialog implements ActionListener {...}
Enfin, Les méthodes décrites par ces interfaces doivent être implémentées pour traiter les évènements interceptés. Pour cela, on recherche l'objet qui est à la source de l'évènement et on le compare aux composants variables d'instance de la boîte :
public void actionPerformed (ActionEvent evt) { if (evt.getSource ().equals (browse)) { browseAction (); } else if (evt.getSource ().equals (ok)) { okAction (); } else if (evt.getSource ().equals (cancel)) { dispose (); } else if (evt.getSource ().equals (help)) { helpAction (); } }
Pour un exemple complet, on pourra se référer au code source de la boîte de dialogue “Nouvelle Session” du pilote interactif gui : capsis.gui.DNewSession
.