Lors de la mise en place d'un menu contextuel, il est souvent nécessaire de mettre à jour l'état des items qui constituent ce menu en fonction du contexte applicatif au moment de l'appel de ce menu. Comme un menu contextuel apparaît à la suite d'un clic droit, la première idée consiste à capturer le clic de souris et de réagir au clic droit :
private void handleMouseClicked(MouseEvent mev)
{
if (mev.getButton() != MouseButton.SECONDARY)
return;
// mise à jour des items de menu via les méthodes setDisable ou setVisible.
...
}Cela fonctionne très bien mais présente trois inconvénients dont un majeur :
Fort heureusement, il y un moyen plus efficient : la capture de l'évènement onShowing du menu contextuel. En effet, ce dernier est une "fenêtre" (presque) comme les autres. L'intérêt et que l'on modifie les états des items de menu AVANT son affichage :
private void handlePropertiesContextMenuShowing(WindowEvent wev)
{
// mise à jour des items de menu via les méthodes setDisable ou setVisible.
...
}Notez que si vous dotez un ou plusieurs items de menu d'un raccourci, la méthode onShowing est également invoquée et donc l'état des items de menu mis à jour.
Rédaction par Jean-Marie Piatte (1983-2021)