Modifier un JPanel(ou Frame) pendant l'exécution d'un programme

Résolu
supers03 Messages postés 106 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 1 décembre 2008 - 15 août 2005 à 12:41
supers03 Messages postés 106 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 1 décembre 2008 - 17 août 2005 à 11:15
Bonjours à tous


J'avais envi de faire une petite application qui necessite l'affichage de trois écrans (trois JPanel que j'appelerai page1, page2, etc ...), l'un apres l'autre, avec un system de precedent/suivant ...


J'ai donc ma frame, avec un panel "Contenu" en haut et un "Navigation" en bas ...
Le problème vient du fait que la "page2" necessite d'être construite en fonction des paramètre que l'utilisateur rentre dans la page1

et quand je fait :

JPanel page2 = new Page2(...);
contenu.remove(page1);
contenu.add(page2);

ça marche, mais je peu plus rien faire avec mon contenu.page2 ... je peu pas l'enlever, le rendre invisible etc ...

du coup j'ai essayer de mettre directement les trois panels, puis de les rendre visible un par un.
Mais toujours à cause du Page 2, je doit faire un :

contenu.page2 = new Page2(...);
contenu.page2.setVisible(true);

mais ça l'affiche pas...

quelqu'un a des explications et solutions à mon problème

Merci d'avance

12 réponses

mouzart Messages postés 161 Date d'inscription mardi 26 avril 2005 Statut Membre Dernière intervention 6 novembre 2008 4
16 août 2005 à 14:29
Salut,
tu doit utiliser un cardLayout au lieu de broderLayout et ca va marcher
3
mouzart Messages postés 161 Date d'inscription mardi 26 avril 2005 Statut Membre Dernière intervention 6 novembre 2008 4
17 août 2005 à 10:36
salut je vais essayer de te donner un petit code pour savoir comment on fait les chose:
JPanel Pan=new JPanel();
JPanel Pan0=new JPanel();
JPanel Pan1=new JPanel();
JPanel Pan2=new JPanel();
CardLayout C=new CardLayout();
dans ton constructeur on ajoute les Pani a Pan:
Pan.setLayout(C);
Pan.add(Pani);

maintenant apres que toutes les fenetres sont ajoutes,Ah Dans Pan au debut on visualise le dernier Pani ajoute;
et maintenant pour voir un Pani bien specifie ex Pan1:
tu na qu'a faire
C.show(Pan;"Pan2");
le 2 param est le nom du JPanel
voila comment ca marche et le CardLayout est le moyen facile mais efficace pour ce genre de boulot,
Allez bon courage je suis a ta disposition si ca marche pas peut etre qu'il ya une anomalie
Abdelilah (Mouzart)
3
supers03 Messages postés 106 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 1 décembre 2008
17 août 2005 à 11:15
Je suis tout à fait d'accord avec toi, mais comme je le dit dans mon message précédent ça ne résoud pas mon problème.En effet, si jamais pendant l'execution de ton programme tu fait un

Pan1=new JPanel();

(en reprenant ton exemple), pour reconstruire ton panel, et ben c'est toujours l'ancien panel qui est affiché, et pas le nouveau que tu viens de reconstruire.
Donc j'ai essayé de refaire un

Pan.add(Pani, "Pani")

et là ça marche enfin .... Et j'ai quand meme mis un remove avant le add, c'est peut etre plus propre ...

... Donc moralité le add() "à chaud" ne marche qu'avec un CardLayout ... lol c'est pas vraiment cool ça !!!

Bon en tout cas merci beacoup à tous ...

Sylvain
3
viking85 Messages postés 59 Date d'inscription lundi 20 novembre 2000 Statut Membre Dernière intervention 28 mars 2007 14
16 août 2005 à 09:37
salut

essaie de faire un contenu.revalidate() lorsque que tu modifie le panel contenu.
ce n'est peut etre qu'un probleme de rafraichissement.

en esperant que cela t'aideras,
Chris.
0

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

Posez votre question
supers03 Messages postés 106 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 1 décembre 2008
16 août 2005 à 11:12
Non non je pense pas que le problème vienne de là (ben en fait le validate ou revalidate je l'avais essayé).

Donc je me suis amusé à faire des petits System.out.println() et voilà ce que j'obtiens pour le contenu.panel :

isDisplayable() - false
isEnabled() - true
isShowing() - false
isValid() - false
isVisible() - true

et je précise qu'il n'y a rien d'affiché ...
0
viking85 Messages postés 59 Date d'inscription lundi 20 novembre 2000 Statut Membre Dernière intervention 28 mars 2007 14
16 août 2005 à 11:28
est ce que tu a un layout ?
0
supers03 Messages postés 106 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 1 décembre 2008
16 août 2005 à 11:47
un layout pour ma frame oui (un BorderLayout)

sinon une petite question comme ça, ça fait quoi exactement le validate() ???
0
viking85 Messages postés 59 Date d'inscription lundi 20 novembre 2000 Statut Membre Dernière intervention 28 mars 2007 14
16 août 2005 à 12:01
concernant le validate() :
je pense qu'en fait, il revérifie les component du container. cependant, je ne suis pas super fort en anglais, et j'ai pas bien compris leur charabia.

concernant ton probleme :
kan tu met les 3 panel dans contenu, est ce que tu peux affiche la panel 1 ou le panel 3 ?
0
supers03 Messages postés 106 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 1 décembre 2008
16 août 2005 à 12:23
ben en fait pour essayer de trouver le pb j'ai mis "contenu" en GridLayout comme ça j'ai les trois en meme temp sous les yeux ...

Si je me contente de faire un :

contenu.page1.setVisible(false)
contenu.page2.setVisible(true)

sans modifier la page2, ça marche sans problème et j'obtient :

isDisplayable() - true
isEnabled() - true
isShowing() - true
isValid() - true
isVisible() - true

par contre le

contenu.page1.setVisible(false)
contenu.page2 = new Page2(...)
contenu.page2.setVisible(true)

ne marche toujours pas
0
mouzart Messages postés 161 Date d'inscription mardi 26 avril 2005 Statut Membre Dernière intervention 6 novembre 2008 4
16 août 2005 à 14:32
Tu fait
Le nomdu cardLaout.show(le com ducontenur ,"le nom de jpanel a visualiser")
0
viking85 Messages postés 59 Date d'inscription lundi 20 novembre 2000 Statut Membre Dernière intervention 28 mars 2007 14
16 août 2005 à 15:04
après avoir regardé ce qu'était le CardLayout, je trouve que c'est une très bonne (meme exelente) idée.

Je pense que cela réglera le problème.

Merci Mouzart.
0
supers03 Messages postés 106 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 1 décembre 2008
16 août 2005 à 17:37
Bon alors c'est vrai que le CardLayout simplifi enormement ce que je
voulais faire ... (mais bon c'est pas la simplicité qui m'interesse, si
tout est simple il n'y a plus d'interet )



M'enfin en attendant ça ne résoud pas mon probleme ... en effet si je fait un



contenu.page2 = new Page2(...)

contenu.card.next(contenu);



ben ça ne m'affiche pas la nouvelle page2, mais toujours l'ancienne ...
donc ben si mouzart t'es un specialiste du CardLayout je veus bient'écouter
0
Rejoignez-nous