Swing/MenuItemAcceleratorFont の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/MenuItemAcceleratorFont へ行く。
- Swing/MenuItemAcceleratorFont の差分を削除
--- category: swing folder: MenuItemAcceleratorFont title: JMenuItemのAccelerator表示を変更する tags: [JMenuItem, UIManager, Font, JCheckBoxMenuItem, JRadioButtonMenuItem] author: aterai pubdate: 2023-11-13T06:14:06+09:00 description: JMenuItemに設定されたAcceleratorの文字サイズや色を変更します。 image: https://drive.google.com/uc?id=1yw38bWwIYd05dmP11IRoVcc-YF740hoh --- * 概要 [#summary] `JMenuItem`に設定された`Accelerator`の文字サイズや色を変更します。 #download(https://drive.google.com/uc?id=1yw38bWwIYd05dmP11IRoVcc-YF740hoh) * サンプルコード [#sourcecode] #code(link){{ Color color1; Color color2; Font font; List<String> list = Arrays.asList( "MenuItem", "CheckBoxMenuItem", "RadioButtonMenuItem"); for (String prefix : list) { String key1 = prefix + ".acceleratorForeground"; String key2 = prefix + ".acceleratorSelectionForeground"; String key3 = prefix + ".acceleratorFont"; if (selected) { color1 = AFC; color2 = Color.WHITE; font = UIManager.getFont(key3); if (font != null) { font = font.deriveFont(10f); } } else { UIDefaults def = UIManager.getLookAndFeelDefaults(); color1 = def.getColor(key1); color2 = def.getColor(key2); font = def.getFont(key3); } UIManager.put(key1, color1); UIManager.put(key2, color2); UIManager.put(key3, font); } SwingUtilities.updateComponentTreeUI(popup); }} * 解説 [#explanation] - `UIManager.put("MenuItem.acceleratorForeground", color)` -- `JMenuItem#setAccelerator(KeyStroke)`で設定した`accelerator`の文字色を変更 -- `MetalLookAndFeel`、`WindowsLookAndFeel`などで有効、`NimbusLookAndFeel`、`GTKLookAndFeel`などでは無効 -- `JCheckBoxMenuItem`, `JRadioButtonMenuItem`には影響しないため、別途`CheckBoxMenuItem.acceleratorForeground`などで設定する必要がある -- `BasicLookAndFeel`で`Menu.acceleratorForeground`, `Menu.acceleratorSelectionForeground`, `Menu.acceleratorSelectionFont`が設定されているが、`JMenu`に`accelerator`を設定しても実行時に`java.lang.Error: setAccelerator() is not defined for JMenu. Use setMnemonic() instead.`とエラーになるので無意味 -- `JCheckBoxMenuItem`、`JRadioButtonMenuItem`には影響しないため、別途`CheckBoxMenuItem.acceleratorForeground`などで設定する必要がある -- `BasicLookAndFeel`で`Menu.acceleratorForeground`、`Menu.acceleratorSelectionForeground`、`Menu.acceleratorSelectionFont`が設定されているが、`JMenu`に`accelerator`を設定しても実行時に`java.lang.Error: setAccelerator() is not defined for JMenu. Use setMnemonic() instead.`とエラーになるので無意味 --- [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/JMenu.html#setAccelerator-javax.swing.KeyStroke- JMenu#setAccelerator(KeyStroke) (Java Platform SE 8)] - `UIManager.put("MenuItem.acceleratorSelectionForeground", color)` -- `accelerator`の選択文字色を変更 - `UIManager.put("MenuItem.acceleratorSelectionFont", font)` -- `accelerator`の`Font`を変更 -- このサンプルでは`Font`サイズを`Font#deriveFont(10f)`で縮小している * 参考リンク [#reference] - [[JMenuItemのAccelerator表示を右揃えにする>Swing/MenuItemAcceleratorAlignment]] * コメント [#comment] #comment #comment