Swing/RendererUseListColors のバックアップ(No.5)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/RendererUseListColors へ行く。
- 1 (2022-04-11 (月) 04:16:11)
- 2 (2022-04-11 (月) 12:05:12)
- 3 (2023-10-05 (木) 12:00:58)
- 4 (2024-01-11 (木) 12:37:14)
- 5 (2025-01-03 (金) 08:57:02)
- 6 (2025-01-03 (金) 09:01:23)
- 7 (2025-01-03 (金) 09:02:38)
- 8 (2025-01-03 (金) 09:03:21)
- 9 (2025-01-03 (金) 09:04:02)
- 10 (2025-06-19 (木) 12:41:37)
- 11 (2025-06-19 (木) 12:43:47)
- 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
概要
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.rendererUseListColorsComboBox.rendererUseListColors: trueComboBox.rendererUseListColorsをtureに設定するとJComboBoxのドロップダウンリスト内に配置されるJListが使用するNimbusLookAndFeelのデフォルトセルレンダラーであるSynthComboBoxRendererはJList#getSelectionBackground()とJList#getSelectionForeground()で取得される色でセルを描画するComboBox.rendererUseListColorsをtureに設定するとセル背景色が描画されなくなるため設定する意味がない?
DefaultListCellRendererJComboBoxにDefaultListCellRendererを設定するとUIDefaultsではなくJList#getSelectionBackground()とJList#getSelectionForeground()で取得される色でセル選択を描画する
BasicComboBoxRendererDefaultListCellRendererではなくBasicComboBoxRendererを使用するとセル背景色が描画されない?
SynthComboBoxRenderer + ListCellRendererSynthComboBoxRendererを使用してデフォルトのUIDefaultsから取得した色でセルを描画するComboBox.rendererUseListColorsをtureに設定している別JComboBoxが存在するとLookAndFeelを変更したときにその値が影響してしまうバグ?があるため、JComboBox#updateUI()をオーバーライドして常にComboBox.rendererUseListColorsをfalseに再設定しているList.rendererUseListColorsはLookAndFeelを変更しても他のJListの設定に影響しない