Swing/RendererUseListColors の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/RendererUseListColors へ行く。
- Swing/RendererUseListColors の差分を削除
--- category: swing folder: RendererUseListColors title: NimbusLookAndFeelでセル選択色をJListから取得するよう変更する tags: [NimbusLookAndFeel, JList, JComboBox, UIManager, LookAndFeel] author: aterai pubdate: 2022-04-11T04:12:31+09:00 description: NimbusLookAndFeelでセル選択色をUIDefaultsで設定された色ではなくJListから取得するよう変更します。 image: https://drive.google.com/uc?id=18L0O-5XjxIFGLpTCKDqLk4voZpSmNMoc --- * 概要 [#summary] `NimbusLookAndFeel`でセル選択色を`UIDefaults`で設定された色ではなく`JList`から取得するよう変更します。 #download(https://drive.google.com/uc?id=18L0O-5XjxIFGLpTCKDqLk4voZpSmNMoc) * サンプルコード [#sourcecode] #code(link){{ 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); }} * 解説 [#explanation] - `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`の設定が影響したりしない --- `List.rendererUseListColors`は`LookAndFeel`を変更しても他の`JList`の設定に影響しない * 参考リンク [#reference] - [[JComboBoxのドロップダウンリストでの選択背景色を変更する>Swing/ComboBoxSelectionBackground]] * コメント [#comment] #comment #comment