Modifier un JPanel(ou Frame) pendant l'exécution d'un programme [Résolu]

supers03 106 Messages postés mardi 6 janvier 2004Date d'inscription 1 décembre 2008 Dernière intervention - 15 août 2005 à 12:41 - Dernière réponse : supers03 106 Messages postés mardi 6 janvier 2004Date d'inscription 1 décembre 2008 Dernière intervention
- 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
Afficher la suite 

12 réponses

Répondre au sujet
mouzart 162 Messages postés mardi 26 avril 2005Date d'inscription 6 novembre 2008 Dernière intervention - 16 août 2005 à 14:29
+3
Utile
Salut,
tu doit utiliser un cardLayout au lieu de broderLayout et ca va marcher
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de mouzart
mouzart 162 Messages postés mardi 26 avril 2005Date d'inscription 6 novembre 2008 Dernière intervention - 17 août 2005 à 10:36
+3
Utile
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)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de mouzart
supers03 106 Messages postés mardi 6 janvier 2004Date d'inscription 1 décembre 2008 Dernière intervention - 17 août 2005 à 11:15
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de supers03
viking85 59 Messages postés lundi 20 novembre 2000Date d'inscription 28 mars 2007 Dernière intervention - 16 août 2005 à 09:37
0
Utile
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.
Commenter la réponse de viking85
supers03 106 Messages postés mardi 6 janvier 2004Date d'inscription 1 décembre 2008 Dernière intervention - 16 août 2005 à 11:12
0
Utile
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é ...
Commenter la réponse de supers03
viking85 59 Messages postés lundi 20 novembre 2000Date d'inscription 28 mars 2007 Dernière intervention - 16 août 2005 à 11:28
0
Utile
est ce que tu a un layout ?
Commenter la réponse de viking85
supers03 106 Messages postés mardi 6 janvier 2004Date d'inscription 1 décembre 2008 Dernière intervention - 16 août 2005 à 11:47
0
Utile
un layout pour ma frame oui (un BorderLayout)

sinon une petite question comme ça, ça fait quoi exactement le validate() ???
Commenter la réponse de supers03
viking85 59 Messages postés lundi 20 novembre 2000Date d'inscription 28 mars 2007 Dernière intervention - 16 août 2005 à 12:01
0
Utile
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 ?
Commenter la réponse de viking85
supers03 106 Messages postés mardi 6 janvier 2004Date d'inscription 1 décembre 2008 Dernière intervention - 16 août 2005 à 12:23
0
Utile
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
Commenter la réponse de supers03
mouzart 162 Messages postés mardi 26 avril 2005Date d'inscription 6 novembre 2008 Dernière intervention - 16 août 2005 à 14:32
0
Utile
Tu fait
Le nomdu cardLaout.show(le com ducontenur ,"le nom de jpanel a visualiser")
Commenter la réponse de mouzart
viking85 59 Messages postés lundi 20 novembre 2000Date d'inscription 28 mars 2007 Dernière intervention - 16 août 2005 à 15:04
0
Utile
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.
Commenter la réponse de viking85
supers03 106 Messages postés mardi 6 janvier 2004Date d'inscription 1 décembre 2008 Dernière intervention - 16 août 2005 à 17:37
0
Utile
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
Commenter la réponse de supers03

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.