This is how we always popup menu's.


public class PopupListener extends MouseAdapter{
  private JPopupMenu popupMenu;

  public PopupListener(JPopupMenu popupMenu) {
    this.popupMenu = popupMenu;
  }

  public PopupListener(PopupTrigger popupTrigger) {
    this.popupMenu = popupTrigger.getPopupMenu();
  }

  public void mousePressed(MouseEvent e) {
      maybeShowPopup(e);
  }

  public void mouseReleased(MouseEvent e) {
      maybeShowPopup(e);
  }

  private void maybeShowPopup(MouseEvent e) {
      if (e.isPopupTrigger()){
        Component invoker = (Component)e.getSource();

        updatePopup(invoker);

        Component oldInvoker = popupMenu.getInvoker();

        popupMenu.show(invoker, e.getX(), e.getY());

        if (oldInvoker != null)
          popupMenu.setInvoker(oldInvoker);
      }
  }

  /**
   * This method is called just before the popup is shown to change the
   * state of the popup; maybe disable some actions.
   *
   * @param invoker the component the PopupListener is added to.
   */
  public void updatePopup(Component invoker){
  }
}

Reply via email to