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

AWT/Swing Java Discussion :

Ajouter à ma frame fenêtre, une nouvelle classe (un panel)


Sujet :

AWT/Swing Java

  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 141
    Par défaut Ajouter à ma frame fenêtre, une nouvelle classe (un panel)
    Bonjour.

    J'ai un problème sur une chose avec Swing

    J'aimerai pouvoir appeler d'une frame "fenetre" appeler une nouvelle classe qui s'appelle "damier" et pouvoir l'ajouter.

    Mais je fais ça :

    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
    public class Fenetre  extends JFrame{
    private Damier unDamier;
    ...
     
    public Fenetre(int[][]  Matrice_debutJeux){
    unDamier = new Damier(Matrice_debutJeux);
    this.getContentPane().add(unDamier, BorderLayout.CENTER);
    ...
    }
     
    // ma classe damier
     
    public class Damier extends JPanel {
    public Damier(int[][]  Matrice_debutJeux) {
     
    ..
     for (int i = 0; i <=  1 ; i++) { 
    	            for (int j = 0; j <= 2; j++) { 
    	            ["+j+"] =" + Matrice_debutJeux[i][j] );
    	            	 lb = new JLabel();
    		            	if ( Matrice_debutJeux[i][j] == 1 )
    		            	{
    		            		System.out.println("ok");
    		            		lb.setBackground(Color.white);
     
                                 } 
    	        }
    	}
     
    //
    En gros je voudrai ajouter à ma frame fenêtre, un Panel dans autre classe
    mais la matrice en paramètre est correct, mais aucun affichage. Comment puis-je faire ?

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 112
    Par défaut
    Faut peut être aussi ajouter tes JLabel dans ton damier, ce que je ne vois pas dans ton code.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 141
    Par défaut
    malheureusement si j'en ai mis , c'est pour sa que cela me semble bizarre.
    Peut être que je devrai afficher tout mon code ?

    Parce que il rentre bien dans ma condition et affiche bien plusieurs fois ok, mais n'affiche pas mes labels , donc est ce que au niveau de mon code cela devrai marcher ou il y aurai quelque chose qui pourrais résoudre mon problème ?

    Merci d'avance

  4. #4
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonjour.

    Montre nous ton code avec les JLabel instanciés et ajoutés dans ta classe dérivée de JPanel, parce que là comme ça, on manque un peu de détails pour te répondre

    Idriss

  5. #5
    Membre expérimenté Avatar de welcome_59
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 203
    Par défaut
    Pour que tes JLabel soient visibles dans ton damier, tu dois les ajouter à ton JPanel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //...
    lb = new JLabel("");
    //...
    damier.add(lb);
    Je te passe la question des layout managers.

    Si c'est ta fenêtre qui ne s'affiche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fenetre.setVisible(true);

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 141
    Par défaut
    Merci

    Voila mes variables de la classe PanelDamier et mon constructeur PanelDamier
    ------------------------------------
    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
     
     
    JLabel lb;
    	public int[] []  Matrice_debutJeu ;
    	JPanel p ;
    	 JButton b ;
     
     
    public PanelDamier(int[][]  Matrice_debutJeux) {
    		// TODO Auto-generated constructor stub
     
    		System.out.println(" coucou Panel Panier ");
    		 System.out.println("Matrice_debutJeux[1][0] =" + Matrice_debutJeux[1][0] );
     
    		 p = new JPanel();
    		  b = new JButton();
     
    		  p.add(b);
     
    		p.setLayout(new GridLayout (2, 3));
    		System.out.println(" matrice jeux  --  matrice pions");
    		 for (int i = 0; i <=  1 ; i++) { 
    	            for (int j = 0; j <= 2; j++) { 
     
     
     
    	            	System.out.println(" PanelPanier : Matrice_debutJeux["+i+"]["+j+"] =" + Matrice_debutJeux[i][j] );
    	            	 lb = new JLabel();
    		            	if ( Matrice_debutJeux[i][j] == 1 )
    		            	{
    		            		System.out.println("ok");
    		            		lb.setBackground(Color.white);
     
    		                } 
    		            	if ( Matrice_debutJeux[i][j] == 2 )
    		            	{
    		            		lb.setBackground(Color.blue);
     
    		                }
    		            	else
    		            	{
    		            		lb.setBackground(Color.orange);
    		            	}
    	               p.add(lb); 
     
    	            } 
    	        }
    Et ici , j'appel mon JPanel dans ma classe Fenetre :
    -------------------------------------------------------
    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
     
    private PanelDamier MonDamier;
    ...
    JFrame plateau = new JFrame();
     
    		 test = new JLabel("test");
     
    		plateau.getContentPane().add(MonDamier, BorderLayout.CENTER);
     
     
    		 plateau.add(test, BorderLayout.SOUTH);
    		 plateau.setSize(500, 400);
    		 plateau.setLocationRelativeTo(null); 
    		 plateau.setResizable(false);
    		 //plateau.pack();
    		 plateau.setVisible(true);
    j’espère que cela pourra vous m'aider.

    Seb

  7. #7
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Dans ton premier extrait : je ne vois pas à quel moment le JPanel p est ajouté dans une autre JComponent (JFrame, JPanel, etc). Ce JPanel n'est donc pas visible à priori.

    Idriss

  8. #8
    Membre très actif
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 141
    Par défaut
    Le but est que dans ma classe je n'ai qu'un seul JPanel , je pense pas que je pourrai ajouter mon JPanel p à un JFrame , pour ajouter cette JFrame dans une autre JFrame.

    Je ne peux pas avoir simplement un JPanel dans une classe et l'ajouter par la suite dans une JFrame dans une autre classe ?

    Seb

  9. #9
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Re-bonjour.

    Si c'est possible de plusieurs façon, par exemple (bien sûr d'autres solutions sont possibles) :

    - Soit ta classe dérive de JPanel mais dans ce cas, les appels aux méthodes de JPanel se font sur this dans ta classe dérivée et non pas un objet appelé au sein de classe dont tu ne fait rien par la suite (p dans ton cas). Et dans l'autre classe, tu considère l'objet de ta classe instancié comme un JPanel.

    - Soit tu fait de la délégation mais dans ce cas tu doit laisser un moyen de récupérer la référence de ton objet JPanel au niveau de ta classe : un getter par exemple. Ici p est public (je ne suis pas très fan) mais tu ne le récupère pas dans ta JFrame.

    Bref, j'ai l'impression que tu fait un mélange de ces deux solutions qui bien évidemment ne fonctionne pas : une classe qui dérive de JPanel mais qui instancie et fait appel aux méthodes d'un attribut interne de type JPanel et n'en fait rien au niveau de ta JFrame.

    Idriss

  10. #10
    Membre très actif
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 141
    Par défaut
    Merci Idriss.
    Ton aide m'a apporté une petite amélioration mais j'ai mon JPanel qui ne ce s'affiche pas.

    Je pense que c'est mon JPanel P qui ne veux pas s ajouter à ma classe PanelDamier qui hérite de JPanel.

    dans la chronologie ça ferai sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    p = new JPanel();
     b = new JButton();
    this.add(b)
    // mes boucles
     lb = new JLabel();
    dans une condition :  p.add(mon lb de couleur ) 
    // je sort de mes boucles 
    this.add(b);
    this.add(p);

    le boutton s'affiche bien mais pas le JPanel.
    Si quelqu'un pourrait me conseiller !!

    Seb

  11. #11
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Juste avant ton this.add(p) est-ce que tu peux ajouter quelque chose dans ton panel comme un JButton ou un JLabel avec une valeur "toto" histoire d'être sûr que ton JPanel n'est pas ajouté.

    Essayes de faire du step by step (pas à pas) avec ton EDI afin de vérifier que tu rentre bien dans ta condition lorsque tu change la couleur de ton panel. Pareil, met un point d’arrêt sur ton this.add(p) pour être sûr que tu passes dessus.

    Bref, va falloir faire un peu de debug

  12. #12
    Membre très actif
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 141
    Par défaut
    Alors ,
    J'ai remplacer mes JPanel par des JButton , et ça marche ...
    Donc y aurait'il un problème avec une classe héritant d'un composant qu'on veut utiliser par la suite ? ...

  13. #13
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Tes JPanel sont peut être vide au moment ou tu les ajoutes. Essayes de forcer l'ajout de composants visibles dans tes JPanel juste avant l'ajout de ces derniers.

  14. #14
    Membre très actif
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 141
    Par défaut
    Alors j'ai fais des pas mal de modif en plus de que tu m'a dis , donc maintenant les JLabel fonctionnent bien mais c'est l'attribut couleur qui ne marche pas, avec une position assez bizarre faudra que je regarde ça de plus prés.

    C'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     lb.setBackground(Color.white);

    Pourtant c'est bien une procédure swing, vue que la procédure marche sur les bouton !!

    hihi

    Seb

  15. #15
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Il faut passer le JLabel en mode opaque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myLabel.setOpaque(true);

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

Discussions similaires

  1. [eZ Publish] CMS eZ Publish ajout d 'une nouvelle class
    Par carn971 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 19
    Dernier message: 24/06/2011, 16h37
  2. Réponses: 18
    Dernier message: 06/11/2006, 21h32
  3. Réponses: 3
    Dernier message: 19/06/2006, 10h26
  4. Réponses: 5
    Dernier message: 20/05/2006, 09h15
  5. [FLASH MX2004] Faire un array d'une nouvelle class
    Par fransouik dans le forum Flash
    Réponses: 9
    Dernier message: 27/12/2004, 17h39

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