Skinning your Swing apps
The release 3.0 of Substance look-and-feel (scheduled to be available on September 4th) features an easy way to skin your apps (which is made even easier in the next version) - using complex themes. Complex theme is based on four other (not necessarily simple) themes:
- Active theme - for controls in active visual state
- Default theme - for controls in default visual state
- Disabled theme - for controls in disabled visual state
- Active title pane theme - for title panes of active windows
To create a complex theme, use the following constructor:
<font color="#ffffff"> </font><font color="#3f5fbf">/**</font><br/>
<font color="#ffffff"> </font><font color="#3f5fbf">* Creates a new complex theme.</font><br/>
<font color="#ffffff"> </font><font color="#3f5fbf">* </font><br/>
<font color="#ffffff"> </font><font color="#3f5fbf">* </font><font color="#7f9fbf">@param </font><font color="#3f5fbf">displayName</font><br/>
<font color="#ffffff"> </font><font color="#3f5fbf">* Theme display name.</font><br/>
<font color="#ffffff"> </font><font color="#3f5fbf">* </font><font color="#7f9fbf">@param </font><font color="#3f5fbf">themeKind</font><br/>
<font color="#ffffff"> </font><font color="#3f5fbf">* Theme kind.</font><br/>
<font color="#ffffff"> </font><font color="#3f5fbf">* </font><font color="#7f9fbf">@param </font><font color="#3f5fbf">activeTheme</font><br/>
<font color="#ffffff"> </font><font color="#3f5fbf">* Active theme.</font><br/>
<font color="#ffffff"> </font><font color="#3f5fbf">* </font><font color="#7f9fbf">@param </font><font color="#3f5fbf">defaultTheme</font><br/>
<font color="#ffffff"> </font><font color="#3f5fbf">* Default theme.</font><br/>
<font color="#ffffff"> </font><font color="#3f5fbf">* </font><font color="#7f9fbf">@param </font><font color="#3f5fbf">disabledTheme</font><br/>
<font color="#ffffff"> </font><font color="#3f5fbf">* Disabled theme.</font><br/>
<font color="#ffffff"> </font><font color="#3f5fbf">* </font><font color="#7f9fbf">@param </font><font color="#3f5fbf">activeTitlePaneTheme</font><br/>
<font color="#ffffff"> </font><font color="#3f5fbf">* Active title pane theme.</font><br/>
<font color="#ffffff"> </font><font color="#3f5fbf">*/</font><br/>
<font color="#ffffff"> </font><font color="#7f0055"><b>public </b></font><font color="#000000">SubstanceComplexTheme</font><font color="#000000">(</font><font color="#000000">String displayName, ThemeKind themeKind,</font><br/>
<font color="#ffffff"> </font><font color="#000000">SubstanceTheme activeTheme, SubstanceTheme defaultTheme,</font><br/>
<font color="#ffffff"> </font><font color="#000000">SubstanceTheme disabledTheme, SubstanceTheme activeTitlePaneTheme</font><font color="#000000">)</font>
Example of a complex theme:
<font color="#ffffff"> </font><font color="#000000">SubstanceTheme activeTheme = </font><font color="#7f0055"><b>new </b></font><font color="#000000">SubstanceMixTheme</font><font color="#000000">(</font><br/>
<font color="#ffffff"> </font><font color="#7f0055"><b>new </b></font><font color="#000000">SubstancePurpleTheme</font><font color="#000000">()</font><font color="#000000">,</font><br/>
<font color="#ffffff"> </font><font color="#7f0055"><b>new </b></font><font color="#000000">SubstanceBarbyPinkTheme</font><font color="#000000">())</font><font color="#000000">.saturate</font><font color="#000000">(</font><font color="#990000">0.5</font><font color="#000000">)</font><font color="#000000">;</font><br/>
<font color="#ffffff"> </font><font color="#000000">SubstanceTheme defaultTheme = </font><font color="#7f0055"><b>new </b></font><font color="#000000">SubstanceMixTheme</font><font color="#000000">(</font><br/>
<font color="#ffffff"> </font><font color="#7f0055"><b>new </b></font><font color="#000000">SubstanceAquaTheme</font><font color="#000000">()</font><font color="#000000">,</font><br/>
<font color="#ffffff"> </font><font color="#7f0055"><b>new </b></font><font color="#000000">SubstanceBottleGreenTheme</font><font color="#000000">())</font><font color="#000000">.saturate</font><font color="#000000">(</font><font color="#990000">0.3</font><font color="#000000">)</font><br/>
<font color="#ffffff"> </font><font color="#000000">.tint</font><font color="#000000">(</font><font color="#990000">0.2</font><font color="#000000">)</font><font color="#000000">;</font><br/>
<font color="#ffffff"> </font><font color="#000000">SubstanceTheme disabledTheme = defaultTheme.saturate</font><font color="#000000">(</font><font color="#000000">-</font><font color="#990000">0.3</font><font color="#000000">)</font><font color="#000000">;</font><br/>
<font color="#ffffff"> </font><font color="#000000">SubstanceTheme activeTitleTheme = activeTheme.saturate</font><font color="#000000">(</font><font color="#000000">-</font><font color="#990000">0.1</font><font color="#000000">)</font><font color="#000000">;</font><br/>
<font color="#ffffff"> </font><br/>
<font color="#ffffff"> </font><font color="#7f0055"><b>this</b></font><font color="#000000">.theme = </font><font color="#7f0055"><b>new </b></font><font color="#000000">SubstanceComplexTheme</font><font color="#000000">(</font><br/>
<font color="#ffffff"> </font><font color="#2a00ff">"Finding Nemo"</font><font color="#000000">, ThemeKind.BRIGHT, activeTheme,</font><br/>
<font color="#ffffff"> </font><font color="#000000">defaultTheme, disabledTheme, activeTitleTheme</font><font color="#000000">)</font><font color="#000000">;</font>
Note that the basic themes of the complex themes are not necessarily
simple. This creates the following visual theme (featured in the matrix rain screensaver which now has proper WebStart version):

Another example of a complex theme:
<font color="#ffffff"> </font><font color="#000000">ColorScheme shiftRed = </font><font color="#7f0055"><b>new </b></font><font color="#000000">ShiftColorScheme</font><font color="#000000">(</font><font color="#7f0055"><b>new </b></font><font color="#000000">SunsetColorScheme</font><font color="#000000">() {</font><br />
<font color="#ffffff"> </font><font color="#646464">@Override</font><br />
<font color="#ffffff"> </font><font color="#7f0055"><b>public </b></font><font color="#000000">Color getForegroundColor</font><font color="#000000">() {</font><br />
<font color="#ffffff"> </font><font color="#7f0055"><b>return </b></font><font color="#000000">Color.white;</font><br />
<font color="#ffffff"> </font><font color="#000000">}</font><br />
<font color="#ffffff"> </font><font color="#000000">}</font><font color="#000000">, Color.red, </font><font color="#990000">0.3</font><font color="#000000">)</font><font color="#000000">;</font><br />
<font color="#ffffff"> </font><font color="#000000">SubstanceTheme activeTheme = </font><font color="#7f0055"><b>new </b></font><font color="#000000">SubstanceTheme</font><font color="#000000">(</font><font color="#000000">shiftRed, </font><font color="#2a00ff">"Red sunset"</font><font color="#000000">,</font><br />
<font color="#ffffff"> </font><font color="#000000">ThemeKind.DARK</font><font color="#000000">)</font><font color="#000000">.saturate</font><font color="#000000">(</font><font color="#990000">0.4</font><font color="#000000">)</font><font color="#000000">;</font><br />
<font color="#ffffff"> </font><font color="#000000">SubstanceTheme defaultTheme = </font><font color="#7f0055"><b>new </b></font><font color="#000000">SubstanceCharcoalTheme</font><font color="#000000">()</font><font color="#000000">;</font><br />
<font color="#ffffff"> </font><font color="#000000">SubstanceTheme disabledTheme = defaultTheme.tone</font><font color="#000000">(</font><font color="#990000">0.2</font><font color="#000000">)</font><font color="#000000">;</font><br />
<font color="#ffffff"> </font><font color="#000000">SubstanceTheme activeTitleTheme = defaultTheme.saturate</font><font color="#000000">(</font><font color="#990000">0.2</font><font color="#000000">)</font><font color="#000000">;</font><br />
<font color="#ffffff"> </font><font color="#000000">SubstanceTheme watermarkTheme = defaultTheme.saturate</font><font color="#000000">(</font><font color="#990000">0.4</font><font color="#000000">)</font><font color="#000000">;</font><br />
<font color="#ffffff"></font><br />
<font color="#ffffff"> </font><font color="#7f0055"><b>this</b></font><font color="#000000">.theme = </font><font color="#7f0055"><b>new </b></font><font color="#000000">SubstanceComplexTheme</font><font color="#000000">(</font><font color="#000000">NAME, ThemeKind.DARK,</font><br />
<font color="#ffffff"> </font><font color="#000000">activeTheme, defaultTheme, disabledTheme, activeTitleTheme,</font><br />
<font color="#ffffff"> </font><font color="#000000">watermarkTheme</font><font color="#000000">)</font><font color="#000000">;</font>
which creates the following theme:

Here are few more examples of complex themes:




- Login or register to post comments
- Printer-friendly version
- kirillcool's blog
- 1253 reads





