SetContentPane sur une "classe mere"

Résolu
cs_romain117 Messages postés 53 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 21 juillet 2013 - 26 nov. 2009 à 11:24
cs_romain117 Messages postés 53 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 21 juillet 2013 - 27 nov. 2009 à 14:10
Bonjour à tous.
Comme je l'ai précisé dans le titre, j'ai un problème avec l'utilisation de setContentPane().

Dans une fenetre appelée I_admin, j'ajoute au Container contenu les JPanels menu et panel_vide
Lorsque je clique sur un bouton de menu, j'appelle ma classe Form_Modif_Train dont le constructeur contiendra des composants qu'on rajoutera dans panel_vide.
Voici le code pour le faire (dans I_admin) :
Form_Modif_Train form_par_numero=new Form_Modif_Train(contenu,panel_vide,200,100);
setContentPane(getContentPane());

La deuxième ligne sert à mettre à jour l'ajout des nouveaux composants. J'ajoute en fait une JConboBox qui va s'afficher dans panel_vide.
Jusque là ça marche.
Maintenant je reviens dans la classe Form_Modif_Train, là où je créé la JComboBox. Lors du choix d'une des valeurs, je dois rajouter des composants dans panel_vide. Je les rajoute donc (à partir de Form_Modif_Train). Puis je veux mettre à jour l'ajout des composants. J'essaie la même chose que tout à l'heure :
setContentPane(getContentPane());


Mais ça ne marche pas ! Ca me dit (sous Eclipse) : The method getContentPane() is undefined for the type Form_Modif_Train.

Je sais pas si c'est très clair.
Si vous avez une idée...
Je peux peut etre vous envoyer des captures d'écran pour que vous compreniez mieux.

5 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
27 nov. 2009 à 14:03
Salut,

Tu te complique bien la vie pour pas grand chose à première vue !

Il te suffit de passer le JPanel utilisé dans ta classe I_Admin à ta classe Form_Modif_Train, et ajouter/modifier/supprimer des contrôles dans le JPanel en question plutôt que de joueur avec les contentPane...
______________________________________
DarK Sidious
3
cs_romain117 Messages postés 53 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 21 juillet 2013 1
27 nov. 2009 à 14:06
J'ai trouvé l'erreur... et c'était tout bête.
Dans Form_Modif_Train j'avais oublié de rajouter les nouveaux composants à mon panel donc forcément...
fille.add(modif_num_trains);



Problème résolu !
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
26 nov. 2009 à 11:37
Salut,

Il vaudrait mieux que tu mettes le code de ta classe Form_Modif_Train afin qu'on puisse voir ce qui cloche.
______________________________________
DarK Sidious
0
cs_romain117 Messages postés 53 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 21 juillet 2013 1
27 nov. 2009 à 13:53
J'ai rajouté "validate" mais ça ne marche toujours pas. J'ai aussi rajouté "extends JFrame" pour mon formulaire Form_Modif_Train pour qu'il n'y ait plus d'erreur avec la ligne setContentPane(getContentPane).
Je poste des extraits du code pour y voir plus clair :

I_Admin :

public class I_Admin extends JFrame implements ActionListener   {

public Container mere;
public JPanel fille;

private void createGUI()
{	

Container contenu=getContentPane();
contenu.setLayout(new GridLayout(1,1,1,1));
mere=contenu;
//panel pour la partie gauche du formulaire
JPanel gauche=new JPanel();
gauche.setLayout(new BoxLayout(gauche,BoxLayout.PAGE_AXIS));
//panel pour le menu en haut à gauche
JPanel panell=new JPanel(new FlowLayout());
//panel pour différents formulaires (à remplir en fonction de ce qu'on veut afficher et vide au départ) position : en bas à gauche
JPanel panel_vide=new JPanel(new FlowLayout());
fille=panel_vide;
panel_vide.setPreferredSize(new Dimension(10, 450));		

                ...
//ajout du menu précédemment créé à panell
                panell.add(menu);
//ajout de panell au panel de gauche
gauche.add(panell);
//ajout de panel_vide au panel de gauche
gauche.add(panel_vide);

//sur le clic d'un bouton du menu
public void actionPerformed(ActionEvent e)
{
Object source=e.getSource();
//Si on veut modifier un train
if (source==Modif)
{

Form_Modif_Train form_par_numero=new Form_Modif_Train(mere,fille,200,100);
setContentPane(getContentPane());
//form_par_numero.validate();

}
}
}


Form_Modif_Train :

public class Form_Modif_Train extends JFrame implements ActionListener
{
private JLabel titre;
private JComboBox choix;
private String var_type="";
private String var_trajet="";
private JPanel modif_num_num;
private JPanel modif_num_trains;
private Container mere;
private JPanel fille;

//I_Admin admin=new I_Admin("Admin");


private String[] liste={"","Rechercher par numéro","Rechercher dans tous les trains"};

//appel du constructeur avec en paramètre le contenu de la fenêtre I_Admin que l'on veut mettre à jour (ce qui ne marche pas !!) et le panel qui est celui que l'on veut modifier
public Form_Modif_Train(Container m,JPanel f,int x, int y)
{
mere=m;
fille=f;
titre=new JLabel("Modification d'un train");
choix=new JComboBox(liste);
choix.addActionListener(this);
f.add(titre);
f.add(choix);
}

//sur la sélection d'une des valeurs de la liste déroulante
public void actionPerformed(ActionEvent e) 
{
Object source=e.getSource();
JLabel num=new JLabel("Numéro :");
JButton B_ok=new JButton("OK");
JLabel type=new JLabel("Type :");
JLabel trajet=new JLabel("Trajet :");
JTextField tf_num=new JTextField(10);
JTextField tf_type=new JTextField(20);
JTextField tf_trajet=new JTextField(30);

JButton B_modif=new JButton("Modifier");
JButton B_suppr=new JButton("Supprimer");

//si affichage Recherche par numéro
if (source==choix)
{
                      if (choix.getSelectedItem()=="Rechercher dans tous les trains")
{
modif_num_num=new JPanel(new FlowLayout());
modif_num_num.add(num);
modif_num_num.add(tf_num);
modif_num_num.add(B_ok);
modif_num_trains=new JPanel(new FlowLayout());
modif_num_trains.add(type);
var_type="";
tf_type.setText(var_type);
modif_num_trains.add(tf_type);
modif_num_trains.add(trajet);
var_trajet="";
tf_trajet.setText(var_trajet);
modif_num_trains.add(tf_trajet);
modif_num_trains.add(B_modif);
modif_num_trains.add(B_suppr);
//L'AFFICHAGE MARCHE DONC ON ARRIVE BIEN ICI
System.out.println("c bon");
//C'EST LA QU'EST L'ERREUR : JE VEUX METTRE À JOUR LA FENETRE I_ADMIN MAIS CA NE MARCHE PAS		
setContentPane(getContentPane());
getContentPane().validate();
}
}


}

}



Pour résumer, dans le formulaire I_Admin quand on clic sur un élément du menu j'affiche en dessous une liste déroulante. Le JPanel modifié est géré dans le formulaire Form_Modif_Train mais c'est dans I_Admin qu'on met à jour cette modification du JPanel. Quand je clique sur "modifier un train" dans le menu, ma liste déroulante apparaît bien en dessous. Mais quand je veux ajouter d'autres choses en dessous de ma liste déroulante c'est là qu'est le problème. Je dois gérer la mise à jour des composants par le JPanel de Form_Modif_Train et non plus directement dans I_Admin.

En espérant être clair.

Merci d'avance.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_romain117 Messages postés 53 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 21 juillet 2013 1
27 nov. 2009 à 14:10
La ligne qui me manquait revient à ce que tu me disais DARKSIDIOUS
puisque fille est le panel de I_Admin passé en argument au constructeur de Form_Modif_Train

Merci pour tes réponses et pour ton extrềme rapidité !
0
Rejoignez-nous