• category: swing folder: PreserveTopLevelSelection title: JMenuBar内のJMenuをキャンセルした場合にその選択状態を維持する tags: [JMenu, JMenuBar, Focus, LookAndFeel] author: aterai pubdate: 2019-06-24T15:54:33+09:00 description: JMenuBar直下のJMenuをキャンセルで閉じた場合にその選択状態を維持するかどうかを設定します。 image: https://drive.google.com/uc?id=1T6g79tQY4xA9kVjE53DiRWGIfHgIQs6p

概要

JMenuBar直下のJMenuをキャンセルで閉じた場合にその選択状態を維持するかどうかを設定します。

サンプルコード

UIManager.put("Menu.preserveTopLevelSelection", Boolean.TRUE);
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、JMenuBar直下のJMenuから開いたJPopupMenuESCキー入力でキャンセルして閉じた場合、そのJMenuの選択状態を維持するかどうかを切り替えてテストできます。

  • WindowsLookAndFeel
    • UIManager.getLookAndFeelDefaults().getBoolean("Menu.preserveTopLevelSelection")の初期値はtrue
    • JMenuBar直下のJMenuから開いたJPopupMenuをキャンセルで閉じた場合、そのJMenuの選択状態を維持する
      • この状態でもう一度キャンセルキー(ESC)を入力すると選択状態はクリアされる
  • その他のLookAndFeel(MetalLookAndFeelNimbusLookAndFeelなど)
    • UIManager.getLookAndFeelDefaults().getBoolean("Menu.preserveTopLevelSelection")の初期値はfalse
    • JMenuBar直下のJMenuから開いたJPopupMenuをキャンセルで閉じた場合、そのJMenuの選択状態はクリアされる
    • UIManager.put("Menu.preserveTopLevelSelection", Boolean.TRUE)を設定すれば、WindowsLookAndFeel風にJMenuの選択状態が維持される

参考リンク

コメント