Problème de layout dynamique de JPanel

Wytt Messages postés 3 Date d'inscription vendredi 5 mars 2004 Statut Membre Dernière intervention 20 juin 2005 - 24 nov. 2004 à 21:27
TheOnly Messages postés 12 Date d'inscription mardi 17 septembre 2002 Statut Membre Dernière intervention 6 janvier 2006 - 18 mars 2005 à 00:49
Bonjour,

Je cherche à créer dynamiquement un JPanel dans lequel je veux disposer à l'aide d'un GridLayout(par exemple) d'autres JPanel.

J'ai créé une petite applet pour mettre en évidence mon problème : j'ai un JTextField et un JButton, et lorsque l'on clique sur le bouton ca doit créer un pnl en dessous avec un gridLayout et ajouter à celui-ci autant de panel qu'indiqué dans le textField.

Pour que le spanels soient bien ajoutés dynamiquement, je suis obligé d'utiliser la méthode ".setBounds" (comme s'il n'y avait pas de layout alors que le but d'un layout entre autres et notament de gérer les problèmes de disposition).

Donc voilà je ne comprends pas trop pourquoi cela ne marche que lorsque jutilise la méthode "setBounds" que ce soit sans layout ou avec...

Voici le code appelé par lorsqu'on clique sur le bouton pour créer dynamiquement le panel "pnlBas":

public void construirePnlBas()
{
this.pnlBas = new JPanel(new GridLayout(0,1));
this.pnlBas.setBounds(this.pnlFond.getX(),this.pnlCentre.getY()+this.pnlCentre.getHeight(),
pnlFond.getWidth(),pnlFond.getHeight()-pnlHaut.getHeight()-pnlCentre.getHeight());
this.pnlBas.setBackground(Color.red);
this.pnlBas.setBorder(BorderFactory.createTitledBorder("PnlBas"));

JPanel[] tabPnlBas = new JPanel[nombre];
for (int i=0;i<tabPnlBas.length;i++)
{
tabPnlBas[i] = new JPanel();
//tabPnlBas[i].setBounds(i*100,i*50,200,50);
tabPnlBas[i].setBackground(Color.black);
tabPnlBas[i].setBorder(BorderFactory.createTitledBorder("Label "+i));
this.pnlBas.add(tabPnlBas[i]);
this.pnlBas.repaint();
}
this.pnlFond.add(pnlBas);
this.pnlFond.repaint();
}

2 réponses

Madvin Messages postés 123 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 26 août 2012 3
20 déc. 2004 à 02:18
Salut,

c'est tout simplement parce que l'application ne recalcule pas à partir de la base de la hiérarchie de tes composants la disposition de ceux-ci. Pour cela, il faut que tu rappelles, après avoir effectué toutes les modifications de ton panel (ajouts+suppressions), la méthode pack() sur ta fenêtre principale.

Cette méthode s'applique aux instances de la classe Window(comme les Frame ou les JFrame).

Par contre pour les applets je ne sais pas comment on fait. Désolé.

En espérant que ça t'aide... ;)

@++
0
TheOnly Messages postés 12 Date d'inscription mardi 17 septembre 2002 Statut Membre Dernière intervention 6 janvier 2006
18 mars 2005 à 00:49
Salut les gars,

pour éviter le sintillement + autres effets néfastes du pack, il vous suffit d'utiliser la méthode validate du JFrame ;-)

Voilà un petit plus
-TheOnly-
0
Rejoignez-nous