概要

JPopupMenuを閉じるイベントが別コンポーネントをクリックすることで発生したとき、コンポーネントのクリックイベントを実行するかどうかを切り替えます。

サンプルコード

UIManager.put("PopupMenu.consumeEventOnClose", false);
View in GitHub: Java, Kotlin

解説

  • PopupMenu.consumeEventOnClose: true
    • JPopupMenuを閉じるイベントが別コンポーネントをクリックすることで発生したとき、コンポーネントのクリックイベントを実行しない
    • WindowsLookAndFeelNimbusLookAndFeelのデフォルト
    • 例:
      • JPopupMenuを開いた状態でBeepボタンをクリックしてもBeep音は鳴らない
      • JPopupMenuを開いた状態でJTextFieldをクリックしてもフォーカスは移動しない
      • JToolBarを分離して別ウィンドウでJPopupMenu開いた状態でも、この動作は変わらない
      • JComboBoxは例外で、ドロップダウンリストが開きコンボエディタにフォーカスも移動する
      • JComboBoxのドロップダウンリストを開いた状態でBeepボタンをクリックしてもBeep音は鳴らない
      • 参考: JPopupMenuを開く前に対象となるJTextFieldにFocusを移動する
  • PopupMenu.consumeEventOnClose: false
    • JPopupMenuを閉じるイベントが別コンポーネントをクリックすることで発生したとき、コンポーネントのクリックイベントを実行する
    • MetalLookAndFeelのデフォルト
    • 例:
      • JPopupMenuを開いた状態でBeepボタンをクリックするとBeep音が鳴る
      • JPopupMenuを開いた状態でJComboBoxのコンボエディタをクリックしてもJPopupMenuは表示状態を維持する
      • JToolBarを分離し別ウィンドウでJPopupMenu開いた状態の場合、JComboBoxのコンボエディタをクリックするとフォーカスが移動してJPopupMenuは非表示になる

参考リンク

コメント