Accueil / Articles PiApplications. / La plate-forme Java / Java FX

Mise à jour d'un menu contextuel.

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 :

  1. Si la souris est capturée à d'autres fins, cela alourdit le code voire le rend délicat (double-clic bouton droit par exemple) ;
  2. La mise à jour se fait APRES l'affichage ce qui généralement se voit (on observe le changement d'état).
  3. Si vous utilisez des raccourcis (accélérateurs de menu), l'état des items de menu ne sera pas mis à jour puisque le gestionnaire de gestion des clics souris ne sera pas invoqué.

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.

(c) PiApplications 2016