Ajout JPanel dans un autre JPanel [Résolu]

riderfun 98 Messages postés jeudi 8 février 2007Date d'inscription 11 janvier 2010 Dernière intervention - 23 févr. 2009 à 12:16 - Dernière réponse : dvoraky 744 Messages postés dimanche 1 avril 2007Date d'inscription 9 mai 2010 Dernière intervention
- 24 févr. 2009 à 14:47
Bonjour, en fait j'ai une petite question qui j'en suis sur est toute bête...
Voilà j'ai créé una JFrame ou il y a un JPanel jusque là tout vas bien!
pui je souhaiterai ajouter a ce JPanel un autre JPanel mais celui ci est une Classe que j'ai fais dérivée du JPanel et je n'arrive pas a l'afficher...voici mon code:
private JPanel getPnlAcceuil() {
if (pnlAcceuil == null) {
pnlAcceuil = new JPanel();
pnlAcceuil.setLayout(null);
pnlAcceuil.setBackground(Color.lightGray);
pnlAcceuil.add(getPnlConfig(), null);
pnlAcceuil.add(new CreateButton(), null);
pnlAcceuil.add(getBtnNewProfil(), null);
}
return pnlAcceuil;
}
public class CreateButton extends JPanel {

JPanel zoneBouton;
public CreateButton() {

zoneBouton = new JPanel();
zoneBouton.setFont(new Font("Dialog", Font.PLAIN, 12));
zoneBouton.setLayout(new FlowLayout());
zoneBouton.setBounds(new Rectangle(6, 122, 538, 166));
zoneBouton.setBorder(BorderFactory.createTitledBorder(BorderFactory
.createLineBorder(Color.MAGENTA), "Profils Disponibles"));
lbl = new JLabel();
lbl.setBounds(new Rectangle(180, 25, 172, 16));
lbl.setText("OS non trouvé");

Merci par avance.
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
cormandyr 600 Messages postés samedi 20 mai 2006Date d'inscription 8 juillet 2016 Dernière intervention - 23 févr. 2009 à 14:24
3
Merci
commence le constructeur par
super();
ensuite, n'oublie pas d'ajouter tous les éléments...
add(zoneBouton);

Merci cormandyr 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de cormandyr
cormandyr 600 Messages postés samedi 20 mai 2006Date d'inscription 8 juillet 2016 Dernière intervention - 23 févr. 2009 à 14:09
0
Merci
as-tu rafraichi ta fenetre?? (si tu modifie la taille de ta fenetre (en cliquant sur les bords par exemple), cela change-t-il quelque chose?
Commenter la réponse de cormandyr
riderfun 98 Messages postés jeudi 8 février 2007Date d'inscription 11 janvier 2010 Dernière intervention - 23 févr. 2009 à 14:16
0
Merci
Non ça ne change rien...j'ai essayé un println dans ma classe CreateButton et ça fontionne...
Commenter la réponse de riderfun
cormandyr 600 Messages postés samedi 20 mai 2006Date d'inscription 8 juillet 2016 Dernière intervention - 23 févr. 2009 à 14:17
0
Merci
est-ce que tu ajoutes pnlAcceuil à ta fenetre??
Commenter la réponse de cormandyr
riderfun 98 Messages postés jeudi 8 février 2007Date d'inscription 11 janvier 2010 Dernière intervention - 23 févr. 2009 à 14:19
0
Merci
Oui, le pnlAcceuil contient 3 Panel dont les 2 sont définis dans la même classe et je voudrais faire une classe "CreateButton" pour un traitement différent et surtout pour alléger le code.. et je l'ajoute comme pour les autres panel mais ça ne fonctionne pas...
private JPanel getPnlAcceuil() {
if (pnlAcceuil == null) {
pnlAcceuil = new JPanel();
pnlAcceuil.setLayout(null);
pnlAcceuil.setBackground(Color.lightGray);
pnlAcceuil.add(getPnlConfig(), null);
pnlAcceuil.add(new CreateButton(), null);
pnlAcceuil.add(getBtnNewProfil(), null);
}
return pnlAcceuil;
}
Commenter la réponse de riderfun
riderfun 98 Messages postés jeudi 8 février 2007Date d'inscription 11 janvier 2010 Dernière intervention - 23 févr. 2009 à 14:22
0
Merci
et en fait à la place du createButton j'avais :
private JPanel getPnlProfils() {
if (pnlProfils == null) {
pnlProfils = new JPanel();
pnlProfils.setFont(new Font("Dialog", Font.PLAIN, 12));
pnlProfils.setLayout(new FlowLayout());
pnlProfils.setBorder(BorderFactory.createTitledBorder(BorderFactory
.createLineBorder(Color.MAGENTA), "Profils Disponibles"));
pnlProfils.setBounds(new Rectangle(3, 113, 538, 166));
}
return pnlProfils;
}

et cela fonctionnait très bien mais maintenant je voudrais l'externaliser...pour y ajouter des traitements
Commenter la réponse de riderfun
riderfun 98 Messages postés jeudi 8 février 2007Date d'inscription 11 janvier 2010 Dernière intervention - 23 févr. 2009 à 14:25
0
Merci
En effet ça fonctionne, en fait il suffisait de faire

private JPanel getPnlAcceuil() {
if (pnlAcceuil == null) {
pnlAcceuil = new JPanel();
pnlAcceuil.setLayout(null);
pnlAcceuil.setBackground(Color.lightGray);
pnlAcceuil.add(getPnlConfig(), null);
pnlAcceuil.add(new CreateButton().zoneBouton, null);
pnlAcceuil.add(getBtnNewProfil(), null);
}
return pnlAcceuil;
}

Merci!!
Commenter la réponse de riderfun
dvoraky 744 Messages postés dimanche 1 avril 2007Date d'inscription 9 mai 2010 Dernière intervention - 24 févr. 2009 à 14:47
0
Merci
Salut,

Attention aux accès aux paramètres d'une classe...
Les paramètres doivent être en private et tu fais des getters/setters.
Ca sera plus propre

Ceci dit, je ne trouve aucun intérêt de faire dériver ta classe CreateButton de JPanel si c'est pour rajouter un attribut JPanel à l'intérieur... Ne crois tu pas?

Donc dans ta classe CreateButton, tu fais comme dis cormandyr, tu mets bien le super() en première ligne de ton constructeur et ensuite tu rajoutes tes composants à ta classe CreateButton.
Comme ta classe CreateButton dérive de JPanel, elle se comporte de la même manière! Tu as donc accès aux méthodes add, setLayout...

public class CreateButton extends JPanel { 

   public CreateButton() { 
      super();
      setFont(new Font("Dialog", Font.PLAIN, 12)); 
      setLayout(new FlowLayout()); 
      setBounds(new Rectangle(6, 122, 538, 166)); 
      setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.MAGENTA), "Profils Disponibles")); 
      lbl = new JLabel(); 
      lbl.setBounds(new Rectangle(180, 25, 172, 16)); 
      lbl.setText("OS non trouvé"); 
      add(lbl);
   }
}

<hr width="100%" size="2" />
 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
Commenter la réponse de dvoraky

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.