Ajout JPanel dans un autre JPanel

Résolu
riderfun Messages postés 98 Date d'inscription jeudi 8 février 2007 Statut Membre Dernière intervention 11 janvier 2010 - 23 févr. 2009 à 12:16
dvoraky Messages postés 744 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 9 mai 2010 - 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.

8 réponses

cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
23 févr. 2009 à 14:24
commence le constructeur par
super();
ensuite, n'oublie pas d'ajouter tous les éléments...
add(zoneBouton);
3
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
23 févr. 2009 à 14:09
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?
0
riderfun Messages postés 98 Date d'inscription jeudi 8 février 2007 Statut Membre Dernière intervention 11 janvier 2010
23 févr. 2009 à 14:16
Non ça ne change rien...j'ai essayé un println dans ma classe CreateButton et ça fontionne...
0
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
23 févr. 2009 à 14:17
est-ce que tu ajoutes pnlAcceuil à ta fenetre??
0

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

Posez votre question
riderfun Messages postés 98 Date d'inscription jeudi 8 février 2007 Statut Membre Dernière intervention 11 janvier 2010
23 févr. 2009 à 14:19
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;
}
0
riderfun Messages postés 98 Date d'inscription jeudi 8 février 2007 Statut Membre Dernière intervention 11 janvier 2010
23 févr. 2009 à 14:22
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
0
riderfun Messages postés 98 Date d'inscription jeudi 8 février 2007 Statut Membre Dernière intervention 11 janvier 2010
23 févr. 2009 à 14:25
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!!
0
dvoraky Messages postés 744 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 9 mai 2010 8
24 févr. 2009 à 14:47
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...
0
Rejoignez-nous