概要

WindowsLookAndFeelを使用する環境でJMenuItemJButtonなどに設定したMnemonicの下線を常に表示するよう設定します。

サンプルコード

showMnemonicsCheck.setSelected(UIManager.getBoolean("Button.showMnemonics"));
showMnemonicsCheck.setMnemonic('B');
showMnemonicsCheck.addActionListener(e -> {
  UIManager.put("Button.showMnemonics", ((JCheckBox) e.getSource()).isSelected());
  if (UIManager.getLookAndFeel() instanceof WindowsLookAndFeel) {
    WindowsLookAndFeel.setMnemonicHidden(true);
    SwingUtilities.getRoot(showMnemonicsCheck).repaint();
  }
});
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、Mnemonicを設定したJMenuItemで下線の表示方法の切り替えをテストしています。 上記のサンプルでは、JMenuItemに設定したMnemonicの下線表示の切り替えをテストしています。
  • UIManager.put("Button.showMnemonics", false);
  • UIManager.put("Button.showMnemonics", false)
    • WindowsLookAndFeelの場合、Mnemonicの下線が非表示になる
      • その他のLookAndFeelでは、この設定は無効
      • この場合でも、Altキーを押すとWindowsLookAndFeel.setMnemonicHidden(false);となって、下線は表示される
      • その他のLookAndFeelではこの設定は無効
      • この場合でもAltキーを押すとWindowsLookAndFeel.setMnemonicHidden(false)となって下線は表示される
    • デフォルト
      • 例えばWindows 10の場合、「コントロール パネル\コンピューターの簡単操作\コンピューターの簡単操作センター\キーボードを使いやすくします」の「ショートカット キーとアクセス キーに下線を表示します」のチェックに対応
    • WindowsLookAndFeelでチェックボックスで切り替えを行う際、WindowsLookAndFeel.setMnemonicHidden(true);で一旦下線を非表示にしてからJFrame全体を再描画している
      • [JDK-6921687 Mnemonic disappears after repeated attempts to open menu items using mnemonics - Java Bug System]
  • UIManager.put("Button.showMnemonics", true);
    • WindowsLookAndFeelの場合でも、Mnemonicの下線が常に表示状態になる
      • 例えばWindows 10の場合「コントロール パネル\コンピューターの簡単操作\コンピューターの簡単操作センター\キーボードを使いやすくします」の「ショートカット キーとアクセス キーに下線を表示します」のチェックに対応
    • WindowsLookAndFeelでチェックボックスで切り替えを行う際、WindowsLookAndFeel.setMnemonicHidden(true)で一旦下線を非表示にしてからJFrame全体を再描画している
  • UIManager.put("Button.showMnemonics", true)
    • WindowsLookAndFeelの場合でもMnemonicの下線が常に表示状態になる

参考リンク

コメント