JMenuItemのAccelerator表示を変更する
Total: 1084, Today: 5, Yesterday: 2
Posted by aterai at
Last-modified:
Summary
JMenuItemに設定されたAcceleratorの文字サイズや色を変更します。
Screenshot

Advertisement
Source Code Examples
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);
View in GitHub: Java, KotlinDescription
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.とエラーになるので無意味
UIManager.put("MenuItem.acceleratorSelectionForeground", color)UIManager.put("MenuItem.acceleratorSelectionFont", font)acceleratorのFontを変更- このサンプルでは
FontサイズをFont#deriveFont(10f)で縮小している