Swing/PreserveTopLevelSelection のバックアップの現在との差分(No.2)
- category: swing folder: PreserveTopLevelSelection title: JMenuBar内のJMenuをキャンセルした場合にその選択状態を維持する tags: [JMenu, JMenuBar, Focus, LookAndFeel] author: aterai pubdate: 2019-06-24T15:54:33+09:00 description: JMenuBar直下のJMenuをキャンセルで閉じた場合にその選択状態を維持するかどうかを設定します。 image: https://drive.google.com/uc?id=1T6g79tQY4xA9kVjE53DiRWGIfHgIQs6p
概要
JMenuBar
直下のJMenu
をキャンセルで閉じた場合にその選択状態を維持するかどうかを設定します。
Screenshot
Advertisement
サンプルコード
#spandel
UIManager.put("Menu.preserveTopLevelSelection", Boolean.TRUE);
#spanend
#spanadd
// UIManager.put("Menu.preserveTopLevelSelection", Boolean.TRUE);
#spanend
#spanadd
String key = "Menu.preserveTopLevelSelection";
#spanend
#spanadd
Boolean b = UIManager.getBoolean(key);
#spanend
#spanadd
JCheckBox preserveTopLevelSelectionCheck = new JCheckBox(key, b) {
#spanend
@Override public void updateUI() {
super.updateUI();
setSelected(UIManager.getLookAndFeelDefaults().getBoolean(key));
UIManager.put(key, isSelected());
}
#spanadd
};
#spanend
#spanadd
preserveTopLevelSelectionCheck.addActionListener(e ->
#spanend
UIManager.put(key, ((JCheckBox) e.getSource()).isSelected()));
View in GitHub: Java, Kotlin解説
上記のサンプルでは、JMenuBar
直下のJMenu
から開いたJPopupMenu
をESCキー入力でキャンセルして閉じた場合、そのJMenu
の選択状態を維持するかどうかを切り替えてテストできます。
上記のサンプルでは、JMenuBar
直下のJMenu
から開いたJPopupMenu
をESCキー入力でキャンセルして閉じた場合そのJMenu
の選択状態を維持するかどうかを切り替えてテストできます。
WindowsLookAndFeel
-
UIManager.getLookAndFeelDefaults().getBoolean("Menu.preserveTopLevelSelection")
の初期値はtrue
-
JMenuBar
直下のJMenu
から開いたJPopupMenu
をキャンセルで閉じた場合、そのJMenu
の選択状態を維持する- この状態でもう一度キャンセルキー(ESC)を入力すると選択状態はクリアされる
- マウスクリックでキャンセルした場合は常に
JMenu
の選択状態はクリアされ、Menu.preserveTopLevelSelection
には影響されない - サブメニューをキャンセルした場合は常に
JMenu
の選択状態は維持され、Menu.preserveTopLevelSelection
には影響されない -
UIManager.getLookAndFeelDefaults().getBoolean("Menu.preserveTopLevelSelection")
の初期値はBoolean.TRUE
-
JMenuBar
直下のJMenu
から開いたJPopupMenu
をキャンセルで閉じた場合そのJMenu
の選択状態を維持する- この状態からもう一度キャンセルキー(ESC)を入力すると選択状態はクリアされる
- マウスクリックでキャンセルした場合は常に
JMenu
の選択状態はクリアされMenu.preserveTopLevelSelection
の設定には影響されない - サブメニューをキャンセルした場合は常に
JMenu
の選択状態は維持されMenu.preserveTopLevelSelection
の設定には影響されない
-
- その他の
LookAndFeel
(MetalLookAndFeel
、NimbusLookAndFeel
など)UIManager.getLookAndFeelDefaults().getBoolean("Menu.preserveTopLevelSelection")
の初期値はfalse
JMenuBar
直下のJMenu
から開いたJPopupMenu
をキャンセルで閉じた場合、そのJMenu
の選択状態はクリアされるUIManager.put("Menu.preserveTopLevelSelection", Boolean.TRUE)
を設定すれば、WindowsLookAndFeel
風にJMenu
の選択状態が維持される- サブメニューをキャンセルした場合は常に
JMenu
の選択状態は維持され、Menu.preserveTopLevelSelection
には影響されない-
MotifLookAndFeel
の場合、サブメニューをキャンセルするとすべてのJPopupMenu
が閉じる
-
- サブメニューをキャンセルした場合は常に
JMenu
の選択状態は維持されMenu.preserveTopLevelSelection
の設定には影響されない-
MotifLookAndFeel
の場合サブメニューをキャンセルするとすべてのJPopupMenu
が閉じる -
UIManager.put("Menu.cancelMode", "hideLastSubmenu");
で最後のJPopupMenu
のみ閉じるよう切り替え可能 - JMenuから開いたJPopupMenuをキャンセルした場合の動作を変更する
-