概要

無効化状態のJMenuItemがハイライト可能かどうかをLookAndFeelごとにテストします。

サンプルコード

// 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()));
View in GitHub: Java, Kotlin

解説

  • 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のハイライトは不可

参考リンク

コメント