JMenuの表示中に別JMenu表示のMnemonicキーが入力された場合の動作を設定する
Total: 1375
, Today: 1
, Yesterday: 0
Posted by aterai at
Last-modified:
概要
トップレベルのJMenu
の表示中に別のトップレベルJMenu
を開くMnemonic
キーが入力された場合、それらのポップアップ表示を切り替えるかどうかを設定します。
Screenshot
Advertisement
サンプルコード
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());
});
View in GitHub: Java, Kotlin解説
Menu.crossMenuMnemonic
:true
MetalLookAndFeel
、MotifLookAndFeel
のデフォルト- トップレベルの
JMenu
の表示中に別のトップレベルJMenu
を開くMnemonic
キーが入力された場合、別のトップレベルJMenu
のポップアップに切り替わる - たとえばこのサンプルでAlt+F、Alt+Eキーを入力すると
Edit
メニューがポップアップ表示状態になる
Menu.crossMenuMnemonic
:false
WindowsLookAndFeel
、NimbusLookAndFeel
のデフォルト- トップレベルの
JMenu
の表示中に別のトップレベルJMenu
を開くMnemonic
キーが入力されても無視される(元のトップレベルJMenu
のポップアップ表示が継続する) - たとえばこのサンプルでAlt+F、Alt+Eキーを入力すると
File
メニューがポップアップ表示状態になる
- トップレベルではない
JMenu
(JToolBar
直下ではなくJPopupMenu
以下に追加されているJMenu
)にはこの設定は無関係 UIManager.put("Menu.crossMenuMnemonic", ...);
で設定を切り替えた場合、SwingUtilities.updateComponentTreeUI(...)
などでLoolAndFeel
のUI
プロパティを更新する必要がある