Java MouseListener — События

Кто-нибудь знает, является ли следующее ожидаемое поведение с точки зрения запуска MouseEvent? Один, кажется, отсутствует или потребляется в другом месте.

  1. Щелкните правой кнопкой мыши JPanel и отобразите JPopupMenu:

    MousePressed java.awt.event.MouseEvent[MOUSE_PRESSED,
      (469,347),absolute(2214,490),button=3,modifiers=Meta+Button3,
      extModifiers=Button3,clickCount=1]
    
    MouseReleased java.awt.event.MouseEvent[MOUSE_RELEASED,
      (469,347),absolute(2214,490),button=3,modifiers=Meta+Button3,
      extModifiers=Meta,clickCount=1]
    
    MouseClicked java.awt.event.MouseEvent[MOUSE_CLICKED,
      (469,347),absolute(2214,490),button=3,modifiers=Meta+Button3,
      extModifiers=Meta,clickCount=1]
    

    Пока все хорошо, все 3 с кнопки 3 и в правильном порядке

  2. Когда JPopupMenu все еще отображается, щелкните левой кнопкой мыши где-нибудь в JPanel, а не в JPopupMenu:

    Что случилось с событием MousePressed?

    MouseReleased java.awt.event.MouseEvent[MOUSE_RELEASED,
      (452,339),absolute(2197,482),button=1,modifiers=Button1,clickCount=1]
    
    MouseClicked java.awt.event.MouseEvent[MOUSE_CLICKED,
      (452,339),absolute(2197,482),button=1,modifiers=Button1,clickCount=1]
    

Заранее спасибо.


person javacavaj    schedule 15.05.2009    source источник


Ответы (1)


Таким образом, событие, вызывающее закрытие всплывающего меню, исчезло.

IIRC, как именно это реализовано, изменилось с 1,5 на 1,6. В 1.5 есть стеклопакет, в 1.6 используются AWTEventListenerс. Подробнее см. в BasicPopupMenuUI источниках. Похоже, вы можете (глобально) остановить потребление события с помощью:

UIManager.put("PopupMenu.consumeEventOnClose", false);
person Tom Hawtin - tackline    schedule 15.05.2009
comment
Разве это не было бы ложным, чтобы предотвратить потребление события? - person Lawrence Dol; 17.05.2009