On Thu, 2 Feb 2023 16:33:06 GMT, Damon Nguyen <[email protected]> wrote:
> 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.
test/jdk/javax/swing/JComboBox/DisabledComboBoxFontTest.java line 2:
> 1: /*
> 2: * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
Copyright year can be changed to 2023.
test/jdk/javax/swing/JComboBox/DisabledComboBoxFontTest.java line 118:
> 116: hasNimbus = false;
> 117:
> 118: for (LookAndFeelInfo info :
> UIManager.getInstalledLookAndFeels()) {
It seems the intention to run the test is in Nimbus LAF only. I think you can
directly set the Nimbus LAF using
`UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");` and
can avoid the `for-loop, condition check` and `hasNimbus `variable.
To print the error message, LAF can be set within try-catch block.
-------------
PR: https://git.openjdk.org/jdk/pull/12390