Bonjour,
dans mon programme, j'ai créé un Panel.
J'intègre ce panel dans une frame avec un :
this.getContentPane().add(MonPanel);
Je voudrais, à partir de mon panel, appeler une méthde de ma frame. Comment dois-je m'y prendre ???
Merci
Version imprimable
Bonjour,
dans mon programme, j'ai créé un Panel.
J'intègre ce panel dans une frame avec un :
this.getContentPane().add(MonPanel);
Je voudrais, à partir de mon panel, appeler une méthde de ma frame. Comment dois-je m'y prendre ???
Merci
Bonjour, tu pourrais passer la JFrame en paramètre de ton constructeur du JPanel.
Mais d'un point de vue conception, ça me paraît être une erreur d'avoir à appeler une méthode de la JFrame dans un JPanel. Que fait cette méthode?
Oui, mais c'est pas très 'joli' ça. Il n'y a pas de méthode qui permet de savoir le 'contener' ???
En fait, j'ai un arbre dont une des méthodes liées à une branche permet de supprimer un enregistrement. La fonction delete appartient au JPanel, mais je voudrait fermer le JFrame qui contient le JPanel dès que l'enregistrement est supprimer et donc appeler le quit de la JFrame à partir du JPanel.
Peut-être que je m'y prend mal et que je devrait savoir comment fermer le Jpanel (et le Jframe qui le contient par la même occasion) ?
Ta fenêtre ne contient qu'un JPanel ?
Dans ce cas, mets la méthode delete au niveau de ta Frame ;)
Hé non, la frame peut contenir différent panel ... ça aurait été trop simple ;-)
Tu peux utiliser la méthode getParent().
getParent ne fonctionne pas, il ne donne que le JPanel car mon Panel est un extends de JPanel ...
Salut,
Tu peux utiliser la méthode SwingUtilities.windowForComponent() pour récupérer la fenêtre qui contient un composant particulier :
a++Code:
1
2
3
4
5
6
7 Window window = SwingUtilities.windowForComponent(panel); if (window instanceof JFrame) { JFrame frame = (JFrame) window; frame.setVisible(false); frame.dispose(); }
:!: Attention à ne pas confondre Parent d'un point de vue composant graphique swing et Parent d'un point de vue classe/héritage!
Il n'y a aucun moyen en Java d'obtenir la classe parent d'une classe donnée.
La méthode de la classe Component getParent() renvoie le conteneur de l'objet sur lequel on appel la méthode.
Autrement dit, si A et B sont 2 composants, si je fais A.add(B), et ensuite B.getParent(), j'obtiendrait A. Que B hérite de tartampion, de Z ou toto importe peu.
:arrow: Tu obtiens un JPanel car l'arborescence implicite est la suivante :
taJFrame < JRootPane < JLayeredPane < JPanel < tonJPanel.
Donc pour récupérer ta JFrame, il faudrait appeler 4 fois successivement getParent(). Heureusement, il existe un raccourci. (edit : celui d'adiGuba est plus court que mon raccourci :))
En espérant que ce soit assez clair :)
Une autre méthode aurait été d'avoir une architecture de type MVC pour que ce soit un contrôleur qui gère la partie métier et à ce moment là tu peux faire ce genre de chose plus simplement ...
Merci beaucoup pour cette méthode,
elle marche à merveille :king:
Je remonte ce poste un peut vieillissant, car je m'interroge un peut .....
je debute en java et je me suis trouvé face au même problème.
Dans ce cas precis, on veut que le JPanel ferme la fenetre qui le contiens
le code suivant qui a été proposé par adiGuba repond a ce que l'on veux
Exemple1
mais pourquoi ne pas plus tot le diminuer en ceci:Code:
1
2
3
4
5
6
7 Window window = SwingUtilities.windowForComponent(panel); if (window instanceof JFrame) { JFrame frame = (JFrame) window; frame.setVisible(false); frame.dispose(); }
Exemple2
plus court et fonctionne aussi bien avec tous les objets qui hérite de prés ou de loins a java.awt.Window soit JFrame, JDialog, ect...Code:SwingUtilities.windowForComponent(this).dispose();
dans mon code j'ai utilisé la méthode de l'exemple2, mais je préfert être sur que je ne suis pas dans l'erreur ....
il y a une raison particulière de procéder comme l'exemple1 ?
Merci ;)