Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

JPopupMenu et plusieurs classes

3 réponses
Avatar
Gabriel
Bonsoir,

Pour affecter un JPopupMenu à un composant swing, j'utilise la nouvelle
méthode de Java 5.0: setComponentPopupMenu();
Mais comment faire lorsque l'interface graphique est séparé en plusieurs
classes ?

J'ai une classe ihm.class principale dans laquelle je déclare le JPopupMenu
et divers composants, puis je viens greffer d'autres parties de l'interface
avec des classes qui "extends" JPanel. Ces classes ont leurs propres
composants mais pas de JPopupMenu. J'instancie ces classe depuis ihm et
j'ajoute ces panels dans un JTabbedPane.

Le problème c'est : peut-on n'avoir qu'une seule instance de JPopupMenu qui
fonctionne sur tout l'interface ? En effet le menu peut-être associé à tous
les composants de la classe ihm avec un
"monComposant.setComponentPopupMenu(popupMenu);" et cela fonctionne
parfaitement pour cette partie de l'interface mais popupMenu n'est pas
visible depuis les autres classes donc je ne peut invoquer cette méthode sur
les composants de ces classes. Faut-il dans ce cas déclarer aussi un
JPopupMenu pour chaque classe ?

J'ai tenté de récupérer le JPopupMenu de la classe principale avec un getter
que j'appel de cette façon depuis une autre classe
((Ihm)this.getTopLevelAncestor()).getPopupMenu();
mais ça plante lamentablement...

Si vous avez une solution à me proposer, je vous en remercie par avance.

Cordialement,
Gabriel

3 réponses

Avatar
Gabriel
J'ai tenté de récupérer le JPopupMenu de la classe principale avec un
getter que j'appel de cette façon depuis une autre classe
((Ihm)this.getTopLevelAncestor()).getPopupMenu();
mais ça plante lamentablement...



En faite this.getParent(); me renvoi null, pareil pour
getTopLevelAncestor(); ou getRootPane();

Pourtant j'utilise ce code dans cette même classe (qui représente un onglet
dans l'interface) ((Ihm)this.getTopLevelAncestor()).remove(this); qui permet
à l'onglet courant (this) de se supprimer "lui même" du JTabbedPane.
A la différence prêt que l'interface est visible a ce moment là, ceci
explique peut-être cela, Ihm n'étant pas fini de construire et pas passer
par setVisible(true); le panel n'a peut-être pas encore de parent au moment
ou je tente d'appeler la méthode getPopupMenu ?.

Mais alors que faire ? il y a encore une foultitude de subtilités qui
m'échappe avec Java et plus j'apprend pire c'est... :)

Cordialement,
Gabriel

Avatar
remy
J'ai tenté de récupérer le JPopupMenu de la classe principale avec un
getter que j'appel de cette façon depuis une autre classe
((Ihm)this.getTopLevelAncestor()).getPopupMenu();
mais ça plante lamentablement...



En faite this.getParent(); me renvoi null, pareil pour
getTopLevelAncestor(); ou getRootPane();


le code est t'il exécuter âpres ou avant
que le panel soit "accrochee" a la frame ?


Pourtant j'utilise ce code dans cette même classe (qui représente un onglet
dans l'interface) ((Ihm)this.getTopLevelAncestor()).remove(this); qui permet
à l'onglet courant (this) de se supprimer "lui même" du JTabbedPane.
A la différence prêt que l'interface est visible a ce moment là, ceci
explique peut-être cela, Ihm n'étant pas fini de construire et pas passer
par setVisible(true); le panel n'a peut-être pas encore de parent au moment
ou je tente d'appeler la méthode getPopupMenu ?.

Mais alors que faire ? il y a encore une foultitude de subtilités qui
m'échappe avec Java et plus j'apprend pire c'est... :)

Cordialement,
Gabriel





Avatar
Gabriel
"remy" a écrit dans le message de news:
eud7rt$gp0$



En faite this.getParent(); me renvoi null, pareil pour
getTopLevelAncestor(); ou getRootPane();


le code est t'il exécuter âpres ou avant
que le panel soit "accrochee" a la frame ?



Merci de ta réponse Remy,
si "l'accrochage" du panel se fait dés son instanciation alors effectivement
je tentais de récupérer le menu avant...quel étourdis !
ça fonctionne effectivement mieux après :)

Sinon est-ce une façon, on va dire "propre" de procéder ?

--
Cordialement,
Gabriel