• category: swing folder: ConsumeEventOnClose title: JPopupMenuを開いた状態で別コンポーネントをクリックした場合のイベントを実行するかを切り替える tags: [JPopupMenu, UIManager, LookAndFeel] author: aterai pubdate: 2017-11-20T15:20:31+09:00 description: JPopupMenuを閉じるイベントが別コンポーネントをクリックすることで発生したとき、コンポーネントのクリックイベントを実行するかどうかを切り替えます。 image: https://drive.google.com/uc?export=view&id=1hqQoBKoHLGEqyn7rHxhKsyo-HBHiKTwAEQ

概要

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は非表示になる

参考リンク

コメント