Problème de débutant avec JFrame

mragnar Messages postés 3 Date d'inscription mardi 14 mars 2006 Statut Membre Dernière intervention 15 mars 2006 - 14 mars 2006 à 22:00
mragnar Messages postés 3 Date d'inscription mardi 14 mars 2006 Statut Membre Dernière intervention 15 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 ?

4 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
14 mars 2006 à 22:46
C'est bien beau de mettre tes contrôles dans un container, mais si tu n'ajoute pas le container à ton JFrame, forcément...

donc rajoute un add(contenu); dans le code de ton constructeur.

_

<spa></spa>
0
mragnar Messages postés 3 Date d'inscription mardi 14 mars 2006 Statut Membre Dernière intervention 15 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 ?
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
15 mars 2006 à 08:23
Okay, à ce moment là, pas besoin de passer par ton container : remplace tes contenu.add par des add tout court.

_

<spa></spa>
0
mragnar Messages postés 3 Date d'inscription mardi 14 mars 2006 Statut Membre Dernière intervention 15 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"...

Merci pour toute aide !
0
Rejoignez-nous