Swing/CrossMenuMnemonic の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/CrossMenuMnemonic へ行く。
- Swing/CrossMenuMnemonic の差分を削除
--- category: swing folder: CrossMenuMnemonic title: JMenuの表示中に別JMenu表示のMnemonicキーが入力された場合の動作を設定する tags: [JMenu, Mnemonic, UIManager, LookAndFeel] author: aterai pubdate: 2019-10-07T15:56:56+09:00 description: トップレベルのJMenuの表示中に別のトップレベルJMenuを開くMnemonicキーが入力された場合、それらのポップアップ表示を切り替えるかどうかを設定します。 image: https://drive.google.com/uc?id=1dyq9CF4OHfr0yYxPQYInJOIbHQMEYtuJ --- * 概要 [#summary] トップレベルの`JMenu`の表示中に別のトップレベル`JMenu`を開く`Mnemonic`キーが入力された場合、それらのポップアップ表示を切り替えるかどうかを設定します。 #download(https://drive.google.com/uc?id=1dyq9CF4OHfr0yYxPQYInJOIbHQMEYtuJ) * サンプルコード [#sourcecode] #code(link){{ String key = "Menu.crossMenuMnemonic"; boolean b = UIManager.getBoolean(key); System.out.println(key + ": " + b); JCheckBox check = new JCheckBox(key, b) { @Override public void updateUI() { super.updateUI(); setSelected(UIManager.getLookAndFeelDefaults().getBoolean(key)); UIManager.put(key, isSelected()); } }; check.addActionListener(e -> { UIManager.put(key, ((JCheckBox) e.getSource()).isSelected()); SwingUtilities.updateComponentTreeUI(getRootPane().getJMenuBar()); }); }} * 解説 [#explanation] - `Menu.crossMenuMnemonic`: `true` -- `MetalLookAndFeel`、`MotifLookAndFeel`のデフォルト -- トップレベルの`JMenu`の表示中に別のトップレベル`JMenu`を開く`Mnemonic`キーが入力された場合、別のトップレベル`JMenu`のポップアップに切り替わる -- たとえばこのサンプルでKBD{Alt+F}、KBD{Alt+E}キーを入力すると`Edit`メニューがポップアップ表示状態になる - `Menu.crossMenuMnemonic`: `false` -- `WindowsLookAndFeel`、`NimbusLookAndFeel`のデフォルト -- トップレベルの`JMenu`の表示中に別のトップレベル`JMenu`を開く`Mnemonic`キーが入力されても無視される(元のトップレベル`JMenu`のポップアップ表示が継続する) -- たとえばこのサンプルでKBD{Alt+F}、KBD{Alt+E}キーを入力すると`File`メニューがポップアップ表示状態になる ---- - トップレベルではない`JMenu`(`JToolBar`直下ではなく`JPopupMenu`以下に追加されている`JMenu`)にはこの設定は無関係 - `UIManager.put("Menu.crossMenuMnemonic", ...);`で設定を切り替えた場合、`SwingUtilities.updateComponentTreeUI(...)`などで`LoolAndFeel`の`UI`プロパティを更新する必要がある * 参考リンク [#reference] - [https://bugs.openjdk.java.net/browse/JDK-6674479 [JDK-6674479] Incorrect cycling between conflicting mnemonics in menu - Java Bug System] - [https://bugs.openjdk.org/browse/JDK-6674479 [JDK-6674479] Incorrect cycling between conflicting mnemonics in menu - Java Bug System] * コメント [#comment] #comment #comment