• 追加された行はこの色です。
  • 削除された行はこの色です。
---
category: swing
folder: DisabledAreNavigable
title: DisabledなJMenuItemのハイライトをテスト
tags: [JMenuItem, UIManager, LookAndFeel]
author: aterai
pubdate: 2013-03-25T00:06:25+09:00
description: DisabledなJMenuItemがハイライト可能かどうかをLookAndFeelごとにテストします。
image: https://lh4.googleusercontent.com/--XCIC-Dhgwk/UU8M_ixmZeI/AAAAAAAABoU/aXonTNvOs0A/s800/DisabledAreNavigable.png
---
* 概要 [#summary]
`Disabled`な`JMenuItem`がハイライト可能かどうかを`LookAndFeel`ごとにテストします。
無効化状態の`JMenuItem`がハイライト可能かどうかを`LookAndFeel`ごとにテストします。

#download(https://lh4.googleusercontent.com/--XCIC-Dhgwk/UU8M_ixmZeI/AAAAAAAABoU/aXonTNvOs0A/s800/DisabledAreNavigable.png)

* サンプルコード [#sourcecode]
#code(link){{
UIManager.put("MenuItem.disabledAreNavigable", Boolean.TRUE);
// UIManager.put("MenuItem.disabledAreNavigable", Boolean.TRUE);
String key = "MenuItem.disabledAreNavigable";
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()));
}}

* 解説 [#explanation]
- `WindowsLookAndFeel`の場合、`UIManager.getBoolean("MenuItem.disabledAreNavigable")`のデフォルトは`true`で、`Disabled`な`JMenuItem`でもハイライトが可能
- `MetalLookAndFeel`の場合、`UIManager.getBoolean("MenuItem.disabledAreNavigable")`のデフォルトは`false`だが、`UIManager.put("MenuItem.disabledAreNavigable", Boolean.TRUE)`とすれば、`Disabled`な`JMenuItem`でもハイライトが可能
- `WindowsLookAndFeel`
-- `UIManager.getLookAndFeelDefaults().getBoolean("MenuItem.disabledAreNavigable")`の初期値は`Boolean.TRUE`
-- `UIManager.put("MenuItem.disabledAreNavigable", ...)`で無効化(`Disabled`)した`JMenuItem`をハイライトするかどうかを切り替え可能
- `MetalLookAndFeel`
-- `UIManager.getLookAndFeelDefaults().getBoolean("MenuItem.disabledAreNavigable")`の初期値は`Boolean.FALSE`
-- `UIManager.put("MenuItem.disabledAreNavigable", Boolean.TRUE)`を設定すれば無効化(`Disabled`)した`JMenuItem`でもハイライトが可能
- `NimbusLookAndFeel`
-- `UIManager.getLookAndFeelDefaults().getBoolean("MenuItem.disabledAreNavigable")`の初期値は`Boolean.FALSE`
-- `UIManager.put("MenuItem.disabledAreNavigable", Boolean.TRUE)`を設定しても無効化(`Disabled`)した`JMenuItem`のハイライトは不可

* 参考リンク [#reference]
// - %%[http://weblogs.java.net/blog/joshy/archive/2006/08/windows_lf_bugs.html Windows L&F Bugs: Part 2 | Java.net]%%
- [https://bugs.openjdk.java.net/browse/JDK-4515765 JDK-4515765 Win L&F: Disabled menu items should show highlight - Java Bug System]
- [https://bugs.openjdk.java.net/browse/JDK-6325555 JDK-6325555 Only Partial Fix in for 4515765 in B53 Swing PIT - Java Bug System]
- [https://bugs.openjdk.org/browse/JDK-4515765 JDK-4515765 Win L&F: Disabled menu items should show highlight - Java Bug System]
- [https://bugs.openjdk.org/browse/JDK-6325555 JDK-6325555 Only Partial Fix in for 4515765 in B53 Swing PIT - Java Bug System]

* コメント [#comment]
#comment
#comment