RFR: 7093691: Nimbus LAF: disabled JComboBox using renderer has bad font color

Damon Nguyen dnguyen at openjdk.org
Thu Feb 2 16:41:25 UTC 2023


Before the fix, a JComboBox in Nimbus L&F would have normal black text even when the JComboBox was disabled if SynthComboBoxRenderer was replaced with a DefaultListCellRenderer. This text should be greyed out like in other L&F's. When looking into the defaults for Nimbus L&F files for attributes and states of a JComboBox, it confirm that the intention for disabled JComboBoxes is nimbusDisabledText (which is grey text).

SynthComboBoxes have an additional check in its default SynthComboBoxRenderer that enables/disables the renderer itself. The SynthComboBoxRenderer inherits its enabled state from the parent ComboBox. Since the renderer with DefaultListCellRenderer is in a separate class without a reference to the comboBox, a listener was added to SynthComboBoxUI.

An additional issue occurred in DefaultListCellRenderer because the renderer overrode the listener's re-assigned enabled state. In testing, setting the enabled state in DefaultListCellRenderer is redundant for all L&F's and is not needed here. However, instead of removing it altogether, a conditional was added specifically to allow ComboBoxes to skip setting enabled state here.

After the fix, the Nimbus JComboBox with DLCR set matches the appearance of a normal Nimbus JComboBox. I can enable/disable the JComboBoxes in the test, and the UI elements behave and appear as expected.

-------------

Commit messages:
 - Add listener & conditional for setEnabled in DLCR. Create test for JComboBox

Changes: https://git.openjdk.org/jdk/pull/12390/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=12390&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-7093691
  Stats: 190 lines in 3 files changed: 183 ins; 6 del; 1 mod
  Patch: https://git.openjdk.org/jdk/pull/12390.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/12390/head:pull/12390

PR: https://git.openjdk.org/jdk/pull/12390



More information about the client-libs-dev mailing list