Search code examples
javaswingsubstance

How can I get the text color of a button using the Substance LaF?


In my Java application I have to custom-paint a control and for that I need to use the same font colors as JButton. (Enabled and disabled) I don't want to hard-code them, because the user can change the Substance skin at runtime.

I'm aware of the ColorSchemes but I'm not sure how to proceed once I have the color scheme of the current skin. Also the Substance documentation says something about creating your own color scheme, but I just can't figure out the way to retrieve a certain color.


Solution

  • OK, finally I figured it out myself:

    The important step is to figure out the correct color scheme. Because in Substance every root pane can have its own skin, it's best to use the getCurrentSkinhelper.

    SubstanceColorScheme s = SubstanceLookAndFeel
            .getCurrentSkin(myComponent)
            .getEnabledColorScheme(
                    SubstanceLookAndFeel.getDecorationType(myComponent)
             );
    

    Other possibilities are getDisabledColorScheme, getActiveColorScheme and getBackgroundColorScheme.

    Then you can use s.getForegroundColor or various helper methods from SubstanceColorUtilities.