NimbusLookAndFeelでセル選択色をJListから取得するよう変更する
Total: 903
, Today: 1
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
NimbusLookAndFeel
でセル選択色をUIDefaults
で設定された色ではなくJList
から取得するよう変更します。
Screenshot
Advertisement
サンプルコード
String[] model = {"Red", "Green", "Blue"};
JList<String> list = new JList<>(model);
UIDefaults d = new UIDefaults();
d.put("List.rendererUseListColors", true);
String key = "Nimbus.Overrides";
list.putClientProperty(key, d);
View in GitHub: Java, Kotlin解説
List.rendererUseListColors
- この設定のデフォルトは
false
(左)でNimbusLookAndFeel
でのみ有効 true
(右)に設定するとUIDefaults
ではなくJList#getSelectionBackground()
とJList#getSelectionForeground()
で取得される色でセル選択を描画する
- この設定のデフォルトは
ComboBox.rendererUseListColors
ComboBox.rendererUseListColors: true
ComboBox.rendererUseListColors
をture
に設定するとJComboBox
のドロップダウンリスト内に配置されるJList
が使用するNimbusLookAndFeel
のデフォルトセルレンダラーであるSynthComboBoxRenderer
はJList#getSelectionBackground()
とJList#getSelectionForeground()
で取得される色でセルを描画するComboBox.rendererUseListColors
をture
に設定するとセル背景色が描画されなくなるため設定する意味がない?
DefaultListCellRenderer
JComboBox
にDefaultListCellRenderer
を設定するとUIDefaults
ではなくJList#getSelectionBackground()
とJList#getSelectionForeground()
で取得される色でセル選択を描画する
BasicComboBoxRenderer
DefaultListCellRenderer
ではなくBasicComboBoxRenderer
を使用するとセル背景色が描画されない?
SynthComboBoxRenderer + ListCellRenderer
SynthComboBoxRenderer
を使用してデフォルトのUIDefaults
から取得した色でセルを描画するComboBox.rendererUseListColors
をture
に設定している別JComboBox
が存在するとLookAndFeel
を変更したときにその値が影響してしまうバグ?があるため、JComboBox#updateUI()
をオーバーライドして常にComboBox.rendererUseListColors
をfalse
に再設定しているList.rendererUseListColors
はLookAndFeel
を変更しても他のJList
の設定に影響しない