OVH Cloud OVH Cloud

Supprimer un JButton dans un panel

5 réponses
Avatar
Lambda
Bonjour,

J'ai une JFrame qui contient un JPanel sur lequel j'ajoute parfois des
JButtons; Mais je voudrais parfois en ajouter, et dans certaines conditions,
les supprimer. Comment les faire effectivement disparaitre ?
J'utilise des :

jb.setEnabled(false);
jb.setVisible(false);
mainPanel.remove(jb);

Mais malgre tout ca ils semblent etre toujours en place... Et restent meme
actifs !
Y a-t-il une subtilite qui m'echappe ?

Merci,

--

Lambda,
sur clavier US donc desole pour les accents.

5 réponses

Avatar
Black Myst
Lambda wrote:
Bonjour,

J'ai une JFrame qui contient un JPanel sur lequel j'ajoute parfois des
JButtons; Mais je voudrais parfois en ajouter, et dans certaines conditions,
les supprimer. Comment les faire effectivement disparaitre ?
J'utilise des :

jb.setEnabled(false);
jb.setVisible(false);
mainPanel.remove(jb);
mainPanel.validate();


Les Add et remove ne sont pas actif apres l'affichage...


Mais malgre tout ca ils semblent etre toujours en place... Et restent meme
actifs !
Y a-t-il une subtilite qui m'echappe ?

Merci,



++

Avatar
TestMan
Bonjour,

Mon swing est plus trop récent mais de mémoire il vous manque un truc du
style :
mainPanel.revalidate();
mainPanel.repaint();
aprés les changement de structure de l'IHM.

Car il faut indiquer au layout manager qu'il à du travail à faire, puis
indiquer au rendu qu'il doit revérifier si tout est bien affiché
correctement.

Pourquoi un tel "rafraichissement" tout simplement pour éviter que
chaque "add"/"remove" en déclanche un, ce qui poserait des problèmes si
l'interface change bcp ...

A+

TM

Bonjour,

J'ai une JFrame qui contient un JPanel sur lequel j'ajoute parfois des
JButtons; Mais je voudrais parfois en ajouter, et dans certaines conditions,
les supprimer. Comment les faire effectivement disparaitre ?
J'utilise des :

jb.setEnabled(false);
jb.setVisible(false);
mainPanel.remove(jb);

Mais malgre tout ca ils semblent etre toujours en place... Et restent meme
actifs !
Y a-t-il une subtilite qui m'echappe ?

Merci,



Avatar
Lambda
"TestMan" wrote in message
news:4429e434$0$31448$
Bonjour,

Mon swing est plus trop récent mais de mémoire il vous manque un truc du
style :
mainPanel.revalidate();
mainPanel.repaint();
aprés les changement de structure de l'IHM.

Car il faut indiquer au layout manager qu'il à du travail à faire, pu is
indiquer au rendu qu'il doit revérifier si tout est bien affiché
correctement.

Pourquoi un tel "rafraichissement" tout simplement pour éviter que
chaque "add"/"remove" en déclanche un, ce qui poserait des problèmes si
l'interface change bcp ...



Merci pour vos reponses, a toi et a BlackMyst;
mais ca ne semble pas resoudre mon problemes... Je dois avouer que je
reste assez surpris, parce que ca paraissait clair et logique comme
demarche.
Dans mon cas precis puisque je garde un nombre fini de boutons meme si
leur texte varie, je vais sans doute resoudre mon probleme par une
methode moins belle mais qu'au moins je sais faire marcher, en
transformant les boutons qui existent deja et en les cachant quand je
souhaite qu'ils disparaissent. Mais si quelqu'un a une explication ou
une autre idee, je reste preneur...

Merci,

Lambda

Avatar
TestMan
Bonjour,

Je persiste sur le fait qu'envoyer un
.revalidate(); (anciennement .validate() .invalidate() )
.repaint();
sur le conteneur ou des modifications du graphe ont été faites, doit
résoudre votre problème....

Ainsi on aurait :

panel.remove(button);
panel.revalidate();
panel.repaint();

http://java.sun.com/docs/books/tutorial/uiswing/layout/howLayoutWorks.html

Vous confirmez que celà ne marche pas comme attendu ? Quel est votre
version de la VM ?

A+

TM

"TestMan" wrote in message
news:4429e434$0$31448$
Bonjour,

Mon swing est plus trop récent mais de mémoire il vous manque un truc du
style :
mainPanel.revalidate();
mainPanel.repaint();
aprés les changement de structure de l'IHM.

Car il faut indiquer au layout manager qu'il à du travail à faire, puis
indiquer au rendu qu'il doit revérifier si tout est bien affiché
correctement.

Pourquoi un tel "rafraichissement" tout simplement pour éviter que
chaque "add"/"remove" en déclanche un, ce qui poserait des problèmes si
l'interface change bcp ...



Merci pour vos reponses, a toi et a BlackMyst;
mais ca ne semble pas resoudre mon problemes... Je dois avouer que je
reste assez surpris, parce que ca paraissait clair et logique comme
demarche.
Dans mon cas precis puisque je garde un nombre fini de boutons meme si
leur texte varie, je vais sans doute resoudre mon probleme par une
methode moins belle mais qu'au moins je sais faire marcher, en
transformant les boutons qui existent deja et en les cachant quand je
souhaite qu'ils disparaissent. Mais si quelqu'un a une explication ou
une autre idee, je reste preneur...

Merci,

Lambda




Avatar
Lambda
"TestMan" wrote in message
news:4431910a$0$26741$
Bonjour,

Je persiste sur le fait qu'envoyer un
.revalidate(); (anciennement .validate() .invalidate() )
.repaint();
sur le conteneur ou des modifications du graphe ont été faites, doit
résoudre votre problème....

Ainsi on aurait :

panel.remove(button);
panel.revalidate();
panel.repaint();

http://java.sun.com/docs/books/tutorial/uiswing/layout/howLayoutWorks.html

Vous confirmez que celà ne marche pas comme attendu ? Quel est votre
version de la VM ?



Je confirme que dans l'etat des choses telles qu'elles etaient, ca ne
marchait pas ; j'ai bien entendu fait attention a mettre en place les
modifications que vous proposiez avant de dire que ca ne marchait pas.
Par contre je m'etais plante comme un debutant dans une partie
completement differente du code et c'est pour ca que ca ne marchait
pas...
Merci pour votre aide et desole de vous avoir fait perdre un peu de
votre temps,

--

Lambda