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

 Java Discussion :

deux JPanel qui ne peuvent coexister


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 58
    Par défaut deux JPanel qui ne peuvent coexister
    bonjour, voici mon code :

    Code : 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
    import java.awt.BorderLayout;
    import java.awt.CardLayout;
    import java.awt.Color;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    class FenetrePoke extends JFrame{
    	public JPanel contentPane = new JPanel();;
    	public CardLayout CL;
    	public JPanel boutons;
    	public JPanel oldPanel = new JPanel();
    	public JPanel newPanel = new JPanel();
     
    	public FenetrePoke() {
     
    		this.setTitle("Appli Pokémon");
    		this.setSize(1500,1200);
    	    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	    this.setLocationRelativeTo(null);
     
    	    this.getContentPane().setLayout(new BorderLayout());
     
    	    JPanel boutons = new JPanel();
    	    JButton Pokedex = new JButton("Pokedex");
    	    boutons.setBackground(Color.red);
    	    Pokedex.addActionListener(new SwitchFrame());
    	    boutons.add(Pokedex);
    	    boutons.add(new JButton("Strat"));
    	    boutons.add(new JButton("Strat 2"));
     
    	    oldPanel.setBackground(Color.green);
    	    oldPanel.setLayout(new BorderLayout());
    	    oldPanel.add(boutons, BorderLayout.NORTH);
     
    	    newPanel.setBackground(Color.blue);
    	    newPanel.setLayout(new BorderLayout());
    	    newPanel.add(boutons, BorderLayout.NORTH);
     
    	    CL = new CardLayout();
    	    contentPane.setLayout(CL);
    	    contentPane.add(oldPanel,"prem");
    		contentPane.add(newPanel,"deux");
     
    		this.setContentPane(oldPanel);
    	    this.setVisible(true);
    	    }
     
    	class SwitchFrame implements ActionListener{
    		public void actionPerformed(ActionEvent e) {
    			CL.show(contentPane, "deux");
    		}
    	}
    }
     
    public class AppPoke {
    	public static void main(String[] args) {
    		FenetrePoke fen = new FenetrePoke();
    	}
    }
    mon problème est que si j'enlève le newPanel le oldPanel qui doit s'afficher en tant que contentPane s'affiche correctement, mais dès que je remet le code du newPanel, le oldPanel cesse d'exister et ne m'affiche plus rien, je ne comprends pas d'où ça vient.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    C'est contentPane que tu dois mettre dans la fenêtre, pas oldPanel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.setContentPane(contentPane);
    En revanche, tu ne peux mettre le JPanel boutons à la fois dans oldPanel et dans newPanel. Un composant ne peut avoir qu'un seul parent : si tu le mets dans un conteneur, il sort automatiquement du précédent. Mais attention, les LayoutManager ne sont pas affectés et du coup ça peut complètement dysfonctionner comme ce que tu obtiens.

    Comme tu mets oldPanel dans contentpane, c'est lui qui s'affiche dans la fenêtre, mais comme il a déjà été mis dans un cardlayout, il s'affiche en taille 0x0, donc on ne le voit pas. Même s'il n'avait pas été mis dans un cardlayout, il apparaîtrait juste complètement vert, parce que les boutons seraient de toute façon dans newPanel.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 58
    Par défaut
    Salut!

    J'ai mis le contentPane de base et en faite, le oldPanel ne s'afficher pas correctement contrairement au newPanel. J'ai décidé de mettre le oldPanel en tant que content pane juste pour voir où ça clochait. Et j'ai découvert que c'est le fait d'avoir les 2 Panel qui fait "buguer" le old panel. mais ça je ne sais pas pourquoi!

    (edit) Ah je vois! dans ce cas comment je pourrait faire pour assigner mon objet boutons à plusieurs parents?

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par daprog Voir le message
    Ah je vois! dans ce cas comment je pourrait faire pour assigner mon objet boutons à plusieurs parents?
    On ne peut pas, c'est comme ça. Pourquoi mettre boutons dans les deux panels ? Si on doit toujours le voir, autant le mettre dans un panel principal qui contient aussi un panel avec le cardlayout.

    Au lieu d'avoir la structure :

    contentpane/cardlayout
    oldpanel/borderlayout
    buttons/ au nord de oldpanel
    newpanel/bordelayout
    buttons/ au nord de newpanel

    faire :

    contentpane/borderlayout
    buttons/ au nord de contentpane
    panel/cardlayout
    oldpanel
    newpanel
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 58
    Par défaut
    C'est ce que je voulais faire au début, mais à un moment ça a bloqué parce que pour utiliser le Cardlayout (pour faire next ou show par exemple) le parent qu'on doit mettre en paramètre doit être un conteneur, vu que j'avais mi un JFrame, il ne le considérait pas comme un conteneur, alors ça me faisait une erreur.

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Quand on met des composants dans une JFrame (par la méthode frame.add()), en fait on les met dans le contentpane de la fenêtre, qui est un Container. Le conteneur à passer en paramètre de la méthode CardLayout.show() c'est de toute manière le Container sur lequel on a mis le CardLayout. Dans la structure que je te conseille dans mon dernier message, il y a un conteneur intermédiaire de toute manière, puisque le panel de boutons est dans le contentpane, qui ne peut donc pas être le conteneur avec le cardlayout. Dans tous les cas, il n'y a aucun souci pour appeler CardLayout.show().
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/07/2019, 15h59
  2. Deux arguments UrlRewritng qui ne peuvent pas marcher en même temps
    Par Alexandrebox dans le forum Serveurs (Apache, IIS,...)
    Réponses: 2
    Dernier message: 25/04/2014, 11h03
  3. Rafraichir un JPanel qui est dans un JScrollPane
    Par anitshka dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 06/12/2004, 23h17
  4. Réponses: 10
    Dernier message: 10/06/2004, 16h20
  5. Que deux événements qui se passent en même temps.
    Par Melchisedec dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 03/08/2003, 14h24

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