概要

NimbusLookAndFeelで編集不可のJComboBox上にマウスカーソルが乗るとJButtonのようにロールオーバー状態を描画するかを切り替えます。

スクリーンショット

Swing/ComboBoxAsButtonWhenNotEditable.png

サンプルコード

JComboBox<String> combo = new JComboBox<>(model);
UIDefaults d = UIManager.getLookAndFeelDefaults();
d.put("ComboBox.buttonWhenNotEditable", false);
combo.putClientProperty("Nimbus.Overrides", d);
combo.putClientProperty("Nimbus.Overrides.InheritDefaults", true);
View in GitHub: Java, Kotlin

解説

  • UIManager.put("ComboBox.buttonWhenNotEditable", true)
    • NimbusLookAndFeelのデフォルトで編集不可のJComboBoxJComboBox内部のArrowButton(JButton)と合わせてマウスカーソルでのロールオーバーやプレス状態で描画が変化する
    • WindowsLookAndFeelではComboBox.buttonWhenNotEditableの設定には依存せず常にロールオーバー状態で描画が変化する
    • 編集可能なJComboBoxではComboBox.buttonWhenNotEditableの設定は無効
  • UIManager.put("ComboBox.buttonWhenNotEditable", false)
    • 上記のサンプルではJComboBox#putClientProperty(...)で下のJComboBoxのみ編集不可のJComboBoxのロールオーバー描画を無効に設定している
    • JComboBox内部のArrowButton(JButton)もロールオーバー描画が無効になる
    • MetalLookAndFeelではComboBox.buttonWhenNotEditableの設定には依存せず常にロールオーバー状態で描画は変化しない

参考リンク

コメント