mragnar
Messages postés3Date d'inscriptionmardi 14 mars 2006StatutMembreDernière intervention15 mars 2006
-
14 mars 2006 à 22:00
mragnar
Messages postés3Date d'inscriptionmardi 14 mars 2006StatutMembreDernière intervention15 mars 2006
-
15 mars 2006 à 18:08
Bonjour,
je débute avec Java, et ai voulu créer une classe "boite de dialogue" simple (j'ai vu après que JDialog existait, mais je persevere quand même). Mon code est le suivant:
public class BoiteDialogue extends JFrame implements ActionListener {
public BoiteDialogue(int type, String texte)
{
this.texte = texte ;
this.type = type ;
setTitle("Boite de dialogue") ;
setSize(300,200) ;
Boui = new JButton("oui") ;
Bnon = new JButton("non") ;
Bok = new JButton("ok") ;
Bcancel = new JButton("cancel") ;
txtAff = new JLabel(texte) ;
Container contenu = getContentPane() ;
GridBagLayout g = new GridBagLayout() ;
contenu.setLayout(g) ;
GridBagConstraints cg = new GridBagConstraints() ;
GridBagConstraints ct = new GridBagConstraints() ;
GridBagConstraints cc = new GridBagConstraints() ;
GridBagConstraints cd = new GridBagConstraints() ;
// texte
ct.gridx = 0 ; ct.gridy= 0 ; ct.weightx = 100 ; ct.weighty = 66 ;
// bouton gauche
cg.gridx = 0 ; cg.gridy= 1 ; cg.weightx = 25 ; cg.weighty = 33 ;
// bouton centre
cc.gridx = 1 ; cc.gridy= 1 ; cc.weightx = 50 ; cc.weighty = 33 ;
// bouton droite
cd.gridx = 2 ; cd.gridy= 1 ; cd.weightx = 25 ; cd.weighty = 33 ;
contenu.add(txtAff,ct) ;
switch(type)
{
case 0:
{
contenu.add(Bok,cd) ;
Bok.addActionListener(this) ;
break ;
}
case 1:
{
contenu.add(Bcancel,cg) ;
contenu.add(Bok,cd) ;
Bcancel.addActionListener(this) ;
Bok.addActionListener(this) ;
break ;
}
case 2:
{
contenu.add(Bnon,cg) ;
contenu.add(Boui,cd) ;
Bnon.addActionListener(this) ;
Boui.addActionListener(this) ;
break ;
}
}
}
public int lanceBoite()
{
setVisible(true);
// do
// {}
// while(resultat == 0) ;
setVisible(false) ;
return resultat ;
}
public void actionPerformed(ActionEvent ev)
{
if((ev.getSource() Bok) || (ev.getSource() Boui)) resultat=1 ;
if((ev.getSource() Bcancel) || (ev.getSource() Bnon)) resultat=2 ;
}
private String texte ;
private int type,resultat=0 ;
private JButton Boui,Bnon,Bok,Bcancel ;
private JLabel txtAff ;
}
le constructeur crée la boite (paramètres: type de boite et texte) et la méthode lanceBoite l'affiche et renvoie le résultat.
MON PROBLEME: dans la méthode lanceBoite, le setVisible n'affiche que le frame de la boite et pas le texte ni les boutons... pourquoi ? et comment y remédier ?
Et autre question: comment rendre modale la boite ainsi affichée ?
mragnar
Messages postés3Date d'inscriptionmardi 14 mars 2006StatutMembreDernière intervention15 mars 2006 15 mars 2006 à 06:51
Darksidious: Merci ! mais je ne comprends pas... j'obtiens la référence du container par Container contenu = getContentPane() , et j'ajoute mes contrôles au container par des commandes contenu.add()... dois-je encore ajouter "contenu" à mon JFrame , alors que "contenu" est une référence au container ?
mragnar
Messages postés3Date d'inscriptionmardi 14 mars 2006StatutMembreDernière intervention15 mars 2006 15 mars 2006 à 18:08
Merci, mais ça ne marche pas (en tout cas chez moi): ça passe la compilation, mais pas à l'exécution. Et d'ailleurs la manière dont je l'ai écrite est celle que j'ai trouvé dans mon bouquin java et sur le web..
Le plus surprenant est que les contrôles ne sont pas ajoutés après le setVisible(true), mais si je supprime le setVisible(false) et je crée un objet BoiteDialogue:
final BoiteDialogue dialogue = new BoiteDialogue(1,"test") ;
System.out.println(dialogue.lanceBoite()) ;
dans un ActionEvent d'un menu déroulant, les controles s'affichent une fois sorti de cette fonction ActionEvent. Donc les controles sont bien là, mais "retardés"...