IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques en Java Discussion :

setContentPane sur une "classe mere"


Sujet :

Interfaces Graphiques en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 71
    Par défaut setContentPane sur une "classe mere"
    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) :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    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 :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par rom117 Voir le message
    La deuxième ligne sert à mettre à jour l'ajout des nouveaux composants.
    Pour redessiner un conteneur déjà vsible dans lequel tu a changé le composant, il faut utiliser la méthode "validate". Ta méthode ne fait qu'utiliser un effet de bord.

    Mais là ç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.
    la méthode getContentPane viens de JFrame (plus précisément de son interface RootPaneContainer). Ton composant n'hérite pas de JFrame.


    Je te conseille au passage de penser à respecter les conventions de nommage en java, ca rendra ton code plus facile à lire.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 71
    Par défaut
    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 :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    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 :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    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 erspérant être clair.

    Merci d'avance.

    PS : Pour les prochains noms, promis, je respecte les conventions de nommage ! (Je savais même pas que ça existait !)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 71
    Par défaut
    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...
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    fille.add(modif_num_trains);

    Problème résolu !

    Merci à toi tchize_

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    ca sert à rien d'étendre JFrame pour autre chose que créer une fenêtre.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 71
    Par défaut
    Ok c'est noté je l'enlève.

    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. addActionListener sur une autre classe
    Par ceetix dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 16/04/2010, 19h26
  2. Mapper deux tables sur une seule classe
    Par gorgonite dans le forum Zend_Db
    Réponses: 13
    Dernier message: 30/06/2008, 13h06
  3. [Probleme] Bip sur une ancienne carte mere K7VT4A pro
    Par alex_m94 dans le forum Composants
    Réponses: 3
    Dernier message: 08/10/2007, 08h51
  4. Réponses: 2
    Dernier message: 12/05/2006, 15h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo