Class SubstanceLookAndFeel
- All Implemented Interfaces:
Serializable
- Direct Known Subclasses:
SubstanceAutumnLookAndFeel
,SubstanceBusinessBlackSteelLookAndFeel
,SubstanceBusinessBlueSteelLookAndFeel
,SubstanceBusinessLookAndFeel
,SubstanceCeruleanLookAndFeel
,SubstanceChallengerDeepLookAndFeel
,SubstanceCremeCoffeeLookAndFeel
,SubstanceCremeLookAndFeel
,SubstanceDustCoffeeLookAndFeel
,SubstanceDustLookAndFeel
,SubstanceEmeraldDuskLookAndFeel
,SubstanceGeminiLookAndFeel
,SubstanceGraphiteAquaLookAndFeel
,SubstanceGraphiteGlassLookAndFeel
,SubstanceGraphiteLookAndFeel
,SubstanceMagellanLookAndFeel
,SubstanceMarinerLookAndFeel
,SubstanceMistAquaLookAndFeel
,SubstanceMistSilverLookAndFeel
,SubstanceModerateLookAndFeel
,SubstanceNebulaBrickWallLookAndFeel
,SubstanceNebulaLookAndFeel
,SubstanceOfficeBlack2007LookAndFeel
,SubstanceOfficeBlue2007LookAndFeel
,SubstanceOfficeSilver2007LookAndFeel
,SubstanceRavenLookAndFeel
,SubstanceSaharaLookAndFeel
,SubstanceTwilightLookAndFeel
Main class for Substance look and feel. All static methods in this class should be called when Substance is the currently set look and feel unless explicitly stated otherwise.
Since version 5.0 this class is abstract. There are three options to use Substance:
- Use one of the core skin-based look-and-feels in the
org.pushingpixels.substance.skin
package. - Extend this class and pass a skin instance to the
SubstanceLookAndFeel(SubstanceSkin)
constructor. - Call
setSkin(String)
orsetSkin(SubstanceSkin)
static methods. These methods do not require Substance to be the current look-and-feel.
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final String
Client property name for ignoring the default (minimum) dimension for a single button.static final String
Client property name for specifying an open side for a single button.static final String
Client property name for specifying that a single button / all application buttons should not paint the background.static final String
Property name for specifying outline shaper.static final String
Client property name for specifying a straight side for a single button.static final String
Client property name for specifying the colorization amount applied to the background and foreground of the current color scheme and the specific control.static final String
Client property name for specifying combo popup flyout orientation.static final String
Property name for specifying the combobox popup prototype display value which is used to compute the width of the popup at runtime.static final String
Client property name for specifying the corner radius for buttons.protected KeyboardFocusManager
The current keyboard focus manager - fix for defect 208.static final String
Property name for specifying that the component should be painted flat (no background / border) when it's inactive.static final String
Client property name for specifying the kind of focus indication on buttons, check boxes and radio buttons.protected PropertyChangeListener
Change listener on keyboard focus manager - fix for defect 208.static final String
VM property name for specifying the heap status trace file.protected static final Set<LocaleChangeListener>
List of all listeners on changing locales.static final String
Property name for specifying menu gutter fill kind.protected String
The name of this look-and-feel instance.static final String
Client property name for specifying the number of echo characters for each password character.static final String
The name of plugin configuration XML resource name.static final String
Client property name for specifying scroll pane button policy.static final String
Property name for specifying that extra UI elements (such as menu items in system menu or lock borders) should be shown.protected SubstanceSkin
The skin of this look-and-feel instance.static final String
Property name for specifying a skin to be used on the specific root pane.protected static final Set<SkinChangeListener>
List of all listeners on skin changes.protected static final String
Internal client property name for storing application-specific font policy.protected static final String
Internal client property name for storing application-specific input map set.static final String
Client property name for specifying that only the close button of a marked-as-modified tab component should pulsate.static final String
Client property name for adding close buttons on tabs.static final String
Client property name for specifying the callback for deciding on the tab close type.static final String
Client property name for specifying the content pane border kind.static final String
Client property name for specifying wheter tabs shown on the left or right will be rotated vertically.static final String
Client property name for specifying the leading vertical line on a table.static final String
Client property name for specifying the trailing verticle line on a table.static final String
VM property name for specifying the trace file.static final org.pushingpixels.lafwidget.animation.AnimationFacet
Smart tree scroll animation facet.static final String
Client property name for specifying that icons on controls such as buttons, toggle buttons, labels, tabs and menu items should match the color of the current color scheme when they are in default state.static final String
Client property name for requesting that watermark should be painted on the component and its descendants.static final String
UIManager property name for specifying that whether any JRootPane with Substance window decorations should be attentive to the active or selected state of the respective JFrame or JInternalFrame.static final String
Client property name for specifying that contents of a frame, dialog, internal frame, desktop icon or tab have been modified and not saved.static final String
Client property name for specifying that whether any JRootPane with Substance window decorations should be drawn with rounded corners in it's decoration frame.static final String
VM property name for specifying that whether any JRootPane with Substance window decorations should be drawn with rounded corners in it's decoration frame. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
Creates a new skin-based Substance look-and-feel. -
Method Summary
Modifier and TypeMethodDescriptionReturns all available skins.static Set<BaseTabCloseListener>
Returns the set of all listeners registered on tab-close events on all tabbed panes.static Set<BaseTabCloseListener>
getAllTabCloseListeners
(JTabbedPane tabbedPane) Returns all listeners registered on tab closing of the specified tabbed pane.static SubstanceSkin
Returns the current global skin.static SubstanceSkin
Returns the current skin for the specified component.static DecorationAreaType
getDecorationType
(Component comp) Returns the decoration area type of the specified component.getDisabledIcon
(JComponent component, Icon icon) static FontPolicy
Looks up and retrieves theFontPolicy
used by the Substance family.getID()
static DecorationAreaType
Returns the immediate decoration area type of the specified component.static InputMapSet
Looks up and retrieves theInputMapSet
used by the Substance family.static ResourceBundle
Retrieves the current label bundle.static ResourceBundle
getLabelBundle
(Locale locale) Retrieves the label bundle for the specified locale.static Set<LocaleChangeListener>
Returns all listeners registered on locale change.getName()
boolean
static JComponent
getTitlePaneComponent
(Window window) Returns the title pane of the specified top-level window.protected void
initClassDefaults
(UIDefaults table) protected void
initComponentDefaults
(UIDefaults table) void
protected static void
Initializes the plugins if necessary.static boolean
Checks whether Substance is the current look-and-feel.boolean
boolean
static boolean
Checks whether theJOptionPane
s created with predefined message types should use constant color schemes for the icons.static void
registerLocaleChangeListener
(LocaleChangeListener localeListener) Registers a new listener on locale change.static void
registerSkinChangeListener
(SkinChangeListener skinChangeListener) Registers a new listener on skin change.static void
registerTabCloseChangeListener
(JTabbedPane tabbedPane, BaseTabCloseListener tabCloseListener) Registers the specified listener on tab-close events on the specified tabbed pane.static void
registerTabCloseChangeListener
(BaseTabCloseListener tabCloseListener) Registers the specified listener on tab-close events on all tabbed panes.static void
Resets the current label bundle.static void
setDecorationType
(JComponent comp, DecorationAreaType type) Sets the decoration type of the specified component and all its children.static void
setFontPolicy
(FontPolicy fontPolicy) Sets theFontPolicy
to be used with Substance family.static void
setInputMapSet
(InputMapSet inputMapSet) Sets theInputMapSet
to be used with Substance family.static void
setLabelBundleClassLoader
(ClassLoader labelBundleClassLoader) Sets the class loader forLABEL_BUNDLE
.static boolean
Sets the specified skin.static boolean
setSkin
(SubstanceSkin newSkin) Sets the specified skin.static void
setToUseConstantThemesOnDialogs
(boolean toUseConstantThemesOnDialogs) Sets the new setting for the icons of theJOptionPane
s created with predefined message types.static void
setWidgetVisible
(JRootPane rootPane, boolean visible, SubstanceConstants.SubstanceWidgetType... substanceWidgets) Sets the visibility of the specified widget kind(s).void
static void
unregisterLocaleChangeListener
(LocaleChangeListener localeListener) Unregisters a listener on locale change.static void
unregisterSkinChangeListener
(SkinChangeListener skinChangeListener) Unregisters a listener on skin change.static void
unregisterTabCloseChangeListener
(JTabbedPane tabbedPane, BaseTabCloseListener tabCloseListener) Unregisters the specified listener on tab-close events on the specified tabbed pane.static void
unregisterTabCloseChangeListener
(BaseTabCloseListener tabCloseListener) Unregisters the specified listener on tab-close events on all tabbed panes.Methods inherited from class javax.swing.plaf.basic.BasicLookAndFeel
createAudioAction, getAudioActionMap, initSystemColorDefaults, loadSystemColors, playSound
Methods inherited from class javax.swing.LookAndFeel
getDesktopPropertyValue, getDisabledSelectedIcon, getLayoutStyle, installBorder, installColors, installColorsAndFont, installProperty, loadKeyBindings, makeComponentInputMap, makeIcon, makeInputMap, makeKeyBindings, provideErrorFeedback, toString, uninstallBorder
-
Field Details
-
PLUGIN_XML
The name of plugin configuration XML resource name. This is used for the laf-plugin support layer of third-party components.- See Also:
-
skinChangeListeners
List of all listeners on skin changes. -
localeChangeListeners
List of all listeners on changing locales. -
focusOwnerChangeListener
Change listener on keyboard focus manager - fix for defect 208. -
currentKeyboardFocusManager
The current keyboard focus manager - fix for defect 208. -
TREE_SMART_SCROLL_ANIMATION_KIND
public static final org.pushingpixels.lafwidget.animation.AnimationFacet TREE_SMART_SCROLL_ANIMATION_KINDSmart tree scroll animation facet. Disabled by default, useAnimationConfigurationManager.allowAnimations(AnimationFacet)
to enable.Smart tree scroll is relevant for scroll panes containing a tree. When enabled, it automatically scrolls the tree horizontally when the viewport shows mainly empty area (especially relevant for multi-level trees with narrow viewports).
- Since:
- 4.0
-
WATERMARK_VISIBLE
Client property name for requesting that watermark should be painted on the component and its descendants. This property can be set either as client property on some component or as global property onUIManager
. The value should be eitherBoolean.TRUE
orBoolean.FALSE
.In order to compute whether the current watermark should be painted on a given component, its hierarchy is traversed bottom up. The first component that has this property set defines the watermark visibility. If neither component nor its ancestors define this property, the global setting on
UIManager
is checked. If there is no global setting, the watermark is not ignored (it is painted).There is special default setting for trees, tables, lists and text components. These show watermark only when this property is explicitly set to
Boolean.TRUE
on the component itself, one of its ancestors or theUIManager
.- Since:
- version 5.0
- See Also:
-
BUTTON_NO_MIN_SIZE_PROPERTY
Client property name for ignoring the default (minimum) dimension for a single button. This property can be set either on the specific button or as a global setting onUIManager
. The value should be eitherBoolean.TRUE
orBoolean.FALSE
.Note that
SubstanceButtonShaper
implementations are not required to respect this property. The current implementations of the defaultStandardButtonShaper
andClassicButtonShaper
respect this property.Example of marking a button to ignore minimum dimension settings:
JButton button = new JButton("text");
button.putClientProperty(SubstanceLookAndFeel.BUTTON_NO_MIN_SIZE_PROPERTY,
Boolean.TRUE);Example of marking all application buttons to ignore minimum dimension settings:
UIManager.put(SubstanceLookAndFeel.BUTTON_NO_MIN_SIZE_PROPERTY,
Boolean.TRUE);- Since:
- version 2.1
- See Also:
-
BUTTON_PAINT_NEVER_PROPERTY
Client property name for specifying that a single button / all application buttons should not paint the background. This property can be set on the specific button, its parent or as a global setting onUIManager
. The value should be eitherBoolean.TRUE
orBoolean.FALSE
. Note that unlike theFLAT_PROPERTY
, a button marked with this property will never show the background (will always be painted flat).Example of marking a button to never paint background:
JButton button = new JButton("text");
button.putClientProperty(SubstanceLookAndFeel.BUTTON_PAINT_NEVER_PROPERTY,
Boolean.TRUE);Example of marking all application buttons to never paint background:
UIManager.put(SubstanceLookAndFeel.BUTTON_PAINT_NEVER_PROPERTY,
Boolean.TRUE);- Since:
- version 2.3
- See Also:
-
BUTTON_SIDE_PROPERTY
Client property name for specifying a straight side for a single button. This property must be set on the specific button. The value can be:- A value in
SubstanceConstants.Side
enum. - Set of values in
SubstanceConstants.Side
enum.
Note that the
SubstanceButtonShaper
implementations are not required to respect this property. The defaultStandardButtonShaper
andClassicButtonShaper
respect this property.Example of marking a button to have straight north side:
JButton button = new JButton("text");
button.putClientProperty(SubstanceLookAndFeel.BUTTON_SIDE_PROPERTY,
SubstanceConstants.Side.RIGHT);- Since:
- version 2.1
- See Also:
- A value in
-
BUTTON_OPEN_SIDE_PROPERTY
Client property name for specifying an open side for a single button. This property must be set on the specific button. The value can be:- A value in
SubstanceConstants.Side
enum. - Set of values in
SubstanceConstants.Side
enum.
Example of marking a button to have open top and west sides:
JButton button = new JButton("text");
SetopenSides = EnumSet.of(Side.TOP, Side.WEST);
button.putClientProperty(SubstanceLookAndFeel.BUTTON_OPEN_SIDE_PROPERTY,
openSides);- Since:
- version 3.1
- See Also:
- A value in
-
CORNER_RADIUS
Client property name for specifying the corner radius for buttons. Currently, this property is respected only on toolbar buttons. This property can be set on the specific toolbar button, on the specific toolbar (will hold for all buttons in the toolbar) or as a global setting onUIManager
. The value should be a positiveFloat
.Example of specifying a (toolbar) button to have corner radius of 5 pixels:
JButton button = new JButton("text");
button.putClientProperty(SubstanceLookAndFeel.CORNER_RADIUS,
Float.valueOf(5.0f));Example of specifying all buttons of a toolbar to have corner radius of 3 pixels:
JToolBar toolbar = new JToolBar("toolbar");
toolbar.putClientProperty(SubstanceLookAndFeel.CORNER_RADIUS,
Float.valueOf(3.0f));Example of specifying all toolbar buttons to have corner radius of 0 pixels:
UIManager.put(SubstanceLookAndFeel.CORNER_RADIUS, Float.valueOf(0.0f));
- Since:
- version 3.0
- See Also:
-
FLAT_PROPERTY
Property name for specifying that the component should be painted flat (no background / border) when it's inactive. This property should be specified on a specific component or its parent and must have eitherBoolean.TRUE
orBoolean.FALSE
value.Example how to mark a button to appear flat:
JButton button = new JButton("text");
button.putClientProperty(SubstanceLookAndFeel.FLAT_PROPERTY,
Boolean.TRUE);- Since:
- version 3.0
- See Also:
-
HEAP_STATUS_TRACE_FILE
VM property name for specifying the heap status trace file. The trace file will contain information on the status of heap. The property value is used as a filename for tracing the heap status. Example for specifying the trace file name:-Dsubstancelaf.heapStatusTraceFile=C:/temp/myApp.heap.log
- Since:
- version 5.0
- See Also:
-
WINDOW_MODIFIED
Client property name for specifying that contents of a frame, dialog, internal frame, desktop icon or tab have been modified and not saved. The property can be set on:JRootPane
- the close button of the title pane of the matching frame / dialog will be animated (in case that the frame / dialog have decorated title pane). In case the root pane belongs to aJInternalFrame
and that frame is iconified (to aJInternalFrame.JDesktopIcon
), the close button of the its desktop icon is animated as well.JComponent
in aJTabbedPane
. Based on theTABBED_PANE_CLOSE_BUTTONS_MODIFIED_ANIMATION
property presence, either the entire tab or its close button area is animated. In this case, this property must be set on the tab component itself, not on one of its child components.
The animation cycles between red, orange and yellow color schemes. In most cases (all but tabs not marked with
TABBED_PANE_CLOSE_BUTTONS_MODIFIED_ANIMATION
property), the animation will be visible only when the mouse hovers over the close button of the matching container (frame, dialog, internal frame, desktop icon, tab). The tooltip of the close button is changed as well to reflect that the container contents are marked as modified.Here is a sample text editing application that illustrates the use of this property. Once the contents of the text pane are changed, the frame is marked as modified. The Save button marks the frame as not-modified. In the real application, the listener on this button will need to persist the changes as well.
public class Changer extends JFrame {
public Changer() {
super("Changer");
this.setLayout(new BorderLayout());
JTextPane textArea = new JTextPane();
this.add(textArea, BorderLayout.CENTER);
textArea.getDocument().addDocumentListener(new DocumentListener() {
private void handleChange() {
getRootPane().putClientProperty(
SubstanceLookAndFeel.WINDOW_MODIFIED, Boolean.TRUE);
}
public void changedUpdate(DocumentEvent e) {
handleChange();
}
public void insertUpdate(DocumentEvent e) {
handleChange();
}
public void removeUpdate(DocumentEvent e) {
handleChange();
}
});
JPanel buttons = new JPanel(new FlowLayout(FlowLayout.RIGHT));
JButton saveButton = new JButton("Save");
saveButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
getRootPane().putClientProperty(
SubstanceLookAndFeel.WINDOW_MODIFIED, Boolean.FALSE);
}
});
buttons.add(saveButton);
this.add(buttons, BorderLayout.SOUTH);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String ... args) {
try {
UIManager.setLookAndFeel(new SubstanceLookAndFeel());
}
catch (Exception exc) {}
JFrame.setDefaultLookAndFeelDecorated(true);
Changer ch = new Changer();
ch.setPreferredSize(new Dimension(200, 200));
ch.setSize(ch.getPreferredSize());
ch.setLocationRelativeTo(null);
ch.setVisible(true);
}
}- Since:
- version 2.1
- See Also:
-
WINDOW_AUTO_DEACTIVATE
UIManager property name for specifying that whether any JRootPane with Substance window decorations should be attentive to the active or selected state of the respective JFrame or JInternalFrame. This property can only be specified in the
UIManager
for this release. The value should be eitherBoolean.TRUE
orBoolean.FALSE
. The initial value depends on the specific skin chosen and will be false if not specified.When active this property will cause the title pane and borders of JFrames and JInternal frames to toggle between {DecorationAreaType#PRIMARY_TITLE_PANE} / {DecorationAreaType#PRIMARY_TITLE_PANE_INACTIVE} or {DecorationAreaType#SECONDARY_TITLE_PANE} / {DecorationAreaType#SECONDARY_TITLE_PANE_INACTIVE} respectively when the respective containers active or selected property changes. If the Title pane of the window decoration is change to any other DecorationAreaType, then the type will not be toggled.
UIManager.put(SubstanceLookAndFeel.WINDOW_AUTO_DEACTIVATE,
Boolean.TRUE);
- Since:
- version 6.3
- See Also:
-
WINDOW_ROUNDED_CORNERS_PROPERTY
VM property name for specifying that whether any JRootPane with Substance window decorations should be drawn with rounded corners in it's decoration frame. This property is specified globally in via a system property. The value will be parsed by {Boolean.valueOf}, unless it is unset or an empty string, then it will default to true. A true value only enables rounded windows, they can be turned off via the UIManager or client properties. A false value disables all rounded corners and is used to remove artifacts from legacy video cards. This value is read when the Substance look and feel is initialized, and is not consulted later.
When unset or set to true this property will cause the title pane and borders of JFrames and JInternal frames to be rounded.
-Dsubstancelaf.windowRoundedCorners=False
- Since:
- version 7.1
- See Also:
-
WINDOW_ROUNDED_CORNERS
Client property name for specifying that whether any JRootPane with Substance window decorations should be drawn with rounded corners in it's decoration frame. This property can be specified per-window or globally in the UIManager or via client properties. The value should be either
Boolean.TRUE
orBoolean.FALSE
. This value is subject to being globally set to false if the system property is set to false. When unset it defauls to true.When unset or set to true this property will cause the title pane and borders of JFrames and JInternal frames to be rounded.
UIManager.put(SubstanceLookAndFeel.WINDOW_ROUNDED_CORNERS,
Boolean.FALSE);
// OR
someFrameOrDialog.putClientProperty(SubstanceLookAndFeel.WINDOW_ROUNDED_CORNERS,
Boolean.FALSE);
// for specific JInternalFrames, JFrames, or JDialogs- Since:
- version 7.1
- See Also:
-
TABBED_PANE_CLOSE_BUTTONS_PROPERTY
Client property name for adding close buttons on tabs. This property can be specified on a single tab component, on aJTabbedPane
itself (will hold for all tab components that don't define this property) or onUIManager
. The value should be eitherBoolean.TRUE
orBoolean.FALSE
. By default, the close buttons are not displayed.Example of setting that all tabs in the application will have close buttons:
UIManager.put(SubstanceLookAndFeel.TABBED_PANE_CLOSE_BUTTONS_PROPERTY,
Boolean.TRUE);A more complex example:
UIManager.put(SubstanceLookAndFeel.TABBED_PANE_CLOSE_BUTTONS_PROPERTY,
Boolean.TRUE);
JTabbedPane jtpMain = new JTabbedPane();
JTabbedPane jtpSecondary = new JTabbedPane();
jtpSecondary.putClientProperty(SubstanceLookAndFeel.TABBED_PANE_CLOSE_BUTTONS_PROPERTY,
Boolean.FALSE);
JPanel panelSecondary = new JPanel();
jtpMain.addTab(jtpSecondary);
jtpMain.addTab(panelSecondary);
JPanel tab1 = new JPanel();
JPanel tab2 = new JPanel();
tab2.putClientProperty(SubstanceLookAndFeel.TABBED_PANE_CLOSE_BUTTONS_PROPERTY,
Boolean.TRUE);
jtpSecondary.addTab(tab1);
jtpSecondary.addTab(tab2);In the example above, the first first-level child (jtpSecondary) doesn't have the close button (since it overrides the global setting). The second first-level child tab (panelSecondary) has close button (from the global UIManager setting). The first second-level tab doesn't have the close button (setting inherited from the parent jtpSecondary tab that overrides the global setting). The second second-level tab has the close button (since its setting overrides the parent setting).
- Since:
- version 2.1
- See Also:
-
TABBED_PANE_CLOSE_BUTTONS_MODIFIED_ANIMATION
Client property name for specifying that only the close button of a marked-as-modified tab component should pulsate. This property can be specified on a single tab component, on aJTabbedPane
itself (will hold for all tab components that don't define this property) or onUIManager
. The value should be eitherBoolean.TRUE
orBoolean.FALSE
. By default, the animation on modified tabs is on the entire tab rectangle. Note that this setting is only relevant for tabs marked withWINDOW_MODIFIED
property.Example of setting that all tabs in the application will have modified animation on close button:
UIManager.put(SubstanceLookAndFeel.TABBED_PANE_CLOSE_BUTTONS_MODIFIED_ANIMATION,
Boolean.TRUE);A more complex example:
UIManager.put(SubstanceLookAndFeel.TABBED_PANE_CLOSE_BUTTONS_MODIFIED_ANIMATION,
Boolean.TRUE);
JTabbedPane jtpMain = new JTabbedPane();
JTabbedPane jtpSecondary = new JTabbedPane();
jtpSecondary.putClientProperty(SubstanceLookAndFeel.TABBED_PANE_CLOSE_BUTTONS_MODIFIED_ANIMATION,
Boolean.FALSE);
JPanel panelSecondary = new JPanel();
jtpMain.addTab(jtpSecondary);
jtpMain.addTab(panelSecondary);
JPanel tab1 = new JPanel();
JPanel tab2 = new JPanel();
tab2.putClientProperty(SubstanceLookAndFeel.TABBED_PANE_CLOSE_BUTTONS_MODIFIED_ANIMATION,
Boolean.TRUE);
jtpSecondary.addTab(tab1);
jtpSecondary.addTab(tab2);In the example above, the first first-level child (jtpSecondary) has the animation on the entire tab (since it overrides the global setting). The second first-level child tab (panelSecondary) has animation on the close button (from the global UIManager setting). The first second-level tab has the animation on the entire tab (setting inherited from the parent jtpSecondary tab that overrides the global setting). The second second-level tab has animation on the close button (since its setting overrides the parent setting).
- Since:
- version 2.2
- See Also:
-
TABBED_PANE_CLOSE_CALLBACK
Client property name for specifying the callback for deciding on the tab close type. This property can be specified on a single tab component, on aJTabbedPane
itself (will hold for all tab components that don't define this property) or onUIManager
. The value should be an instance ofTabCloseCallback
. Note that this setting is only relevant for tabs marked withTABBED_PANE_CLOSE_BUTTONS_PROPERTY
property.Example of custom tab close callback set on a tabbed pane:
TabCloseCallback closeCallback = new TabCloseCallback() {
public TabCloseKind onAreaClick(JTabbedPane tabbedPane,
int tabIndex, MouseEvent mouseEvent) {
if (mouseEvent.getButton() != MouseEvent.BUTTON3)
return TabCloseKind.NONE;
if (mouseEvent.isShiftDown()) {
return TabCloseKind.ALL;
}
return TabCloseKind.THIS;
}
public TabCloseKind onCloseButtonClick(JTabbedPane tabbedPane,
int tabIndex, MouseEvent mouseEvent) {
if (mouseEvent.isAltDown()) {
return TabCloseKind.ALL_BUT_THIS;
}
if (mouseEvent.isShiftDown()) {
return TabCloseKind.ALL;
}
return TabCloseKind.THIS;
}
public String getAreaTooltip(JTabbedPane tabbedPane, int tabIndex) {
return null;
}
public String getCloseButtonTooltip(JTabbedPane tabbedPane,
int tabIndex) {
StringBuffer result = new StringBuffer();
result.append("<html><body>");
result.append("Mouse click closes <b>"
+ tabbedPane.getTitleAt(tabIndex) + "</b> tab");
result.append("<br><b>Alt</b>-Mouse click closes all tabs but <b>"
+ tabbedPane.getTitleAt(tabIndex) + "</b> tab");
result.append("<br><b>Shift</b>-Mouse click closes all tabs");
result.append("</body></html>");
return result.toString();
}
};
JTabbedPane jtp = new JTabbedPane();
jtp.putClientProperty(
SubstanceLookAndFeel.TABBED_PANE_CLOSE_CALLBACK,
closeCallback);- Since:
- version 2.3
- See Also:
-
TABBED_PANE_CONTENT_BORDER_KIND
Client property name for specifying the content pane border kind. This property can be specified either on a singleJTabbedPane
or onUIManager
. The value should be one ofSubstanceConstants.TabContentPaneBorderKind
enum. By default, the border kind isSubstanceConstants.TabContentPaneBorderKind.DOUBLE_FULL
.Example of setting that all tabbed panes in the application have single full border (default setting prior to version 4.1):
UIManager.put(SubstanceLookAndFeel.TABBED_PANE_CONTENT_BORDER_KIND,
TabContentPaneBorderKind.SINGLE_FULL);Example of specifying that the specific tabbed pane has single full border (default setting prior to version 4.1):
JTabbedPane jtpMain = new JTabbedPane();
jtpMain.putClientProperty(SubstanceLookAndFeel.TABBED_PANE_CONTENT_BORDER_KIND,
TabContentPaneBorderKind.SINGLE_FULL);- Since:
- version 4.1
- See Also:
-
TABBED_PANE_ROTATE_SIDE_TABS
Client property name for specifying wheter tabs shown on the left or right will be rotated vertically. This property can be specified either on a singleJTabbedPane
or on *UIManager
. The value should a Boolean. By default, the rotation is enabled.Example of setting that all tabbed panes should not rotate the tabs:
UIManager.put(SubstanceLookAndFeel.TABBED_PANE_ROTATE_SIDE_TABS,
Boolean.FALSE);Example of specifying that the specific tabbed pane tabbed panes should not rotate the tabs:
JTabbedPane jtpMain = new JTabbedPane();
jtpMain.putClientProperty(SubstanceLookAndFeel.TABBED_PANE_ROTATE_SIDE_TABS,
Boolean.FALSE);- Since:
- version 7.2
- See Also:
-
TABLE_LEADING_VERTICAL_LINE
Client property name for specifying the leading vertical line on a table. Normally the presence of the leading vertical line on a table is driven by the presence or absence of a row header.- The default
null
- The line is driven by the presence of row headers true
- The line is always drawn.false
- The line is never drawn.
JTable jtable = new JTable();
jtable.putClientProperty(SubstanceLookAndFeel.TABLE_LEADING_VERTICAL_LINE,
false);- Since:
- version 7.2
- See Also:
- The default
-
TABLE_TRAILING_VERTICAL_LINE
Client property name for specifying the trailing verticle line on a table. Normally the presence of the leading vertical line on a table is driven by the width of the table and the width of the children- The default
null
- The line is driven by whether it fits within the view of the scroll pane (true) or not (false) true
- The line is always drawn.false
- The line is never drawn.
JTable jtable = new JTable();
jtable.putClientProperty(SubstanceLookAndFeel.TABLE_TRAILING_VERTICAL_LINE,
false);- Since:
- version 7.2
- See Also:
- The default
-
COMBO_BOX_POPUP_FLYOUT_ORIENTATION
Client property name for specifying combo popup flyout orientation. This property can be set on either a specificJComboBox
or globally onUIManager
. The value should be one of theInteger
s below:- The default
SwingConstants.SOUTH
- the popup is displayed directly below the combo aligned to the left. SwingConstants.NORTH
- the popup is displayed directly above the combo aligned to the left.SwingConstants.EAST
- the popup is displayed to the left of the combo aligned to the top.SwingConstants.WEST
- the popup is displayed to the right of the combo aligned to the top.SwingConstants.CENTER
- the popup is displayed centered vertically over the combo aligned to the left.
Note that the combo arrow changes in accordance with the combo popup flyout orientation. Example of setting a combobox with a custom flyout orientation:
JComboBox cb = new JComboBox(
new Object[] { "Ester", "Jordi", "Jordina", "Jorge", "Sergi" });
cb.putClientProperty(SubstanceLookAndFeel.COMBO_BOX_POPUP_FLYOUT_ORIENTATION,
SwingConstants.CENTER);- Since:
- version 2.3
- See Also:
- The default
-
SCROLL_PANE_BUTTONS_POLICY
Client property name for specifying scroll pane button policy. This property can be set on either a specificJScrollPane
or globally onUIManager
. The value should be one of theSubstanceConstants.ScrollPaneButtonPolicyKind
enum. Example of setting a scroll pane with a custom button policy:JScrollPane jsp = new JScrollPane(new JPanel());
jsp.putClientProperty(SubstanceLookAndFeel.SCROLL_PANE_BUTTONS_POLICY,
ScrollPaneButtonPolicyKind.MULTIPLE);- Since:
- version 3.1
- See Also:
-
SHOW_EXTRA_WIDGETS
Property name for specifying that extra UI elements (such as menu items in system menu or lock borders) should be shown. This property can be set as a global setting onUIManager
or as a client property on a specific component. The value should be eitherBoolean.TRUE
orBoolean.FALSE
.Example of setting this property on
UIManager
:UIManager.put(SubstanceLookAndFeel.SHOW_EXTRA_WIDGETS, Boolean.TRUE); SwingUtilities.updateComponentTree(myFrame);
- Since:
- version 5.0
- See Also:
-
MENU_GUTTER_FILL_KIND
Property name for specifying menu gutter fill kind. Menu gutter is the part of the menu where checkmarks and icons are painted. The value should be one ofSubstanceConstants.MenuGutterFillKind
enum. This property can be set globally on theUIManager
. The default value isSubstanceConstants.MenuGutterFillKind.HARD
.Example of setting soft fill kind:
UIManager.put(SubstanceLookAndFeel.MENU_GUTTER_FILL_KIND, MenuGutterFillKind.SOFT);
- Since:
- version 3.2
- See Also:
-
FOCUS_KIND
Client property name for specifying the kind of focus indication on buttons, check boxes and radio buttons. The value should be one ofSubstanceConstants.FocusKind
enum. This property can be set either on the specific component or as global property onUIManager
.In order to compute the kind of focus indication for some component, the component's hierarchy is traversed bottom up. The first component that has this property set, defines the focus indication kind. If neither component nor its ancestors define this property, the global setting on
UIManager
is checked. If there is no global setting, the defaultSubstanceConstants.FocusKind.ALL_INNER
is used. Here is an example to illustrate the above:JPanel topPanel = new JPanel();
topPanel.putClientProperty(SubstanceLookAndFeel.FOCUS_KIND, FocusKind.UNDERLINE);
JPanel panel1 = new JPanel();
JButton b1 = new JButton("button1");
b1.putClientProperty(SubstanceLookAndFeel.FOCUS_KIND, FocusKind.TEXT);
JButton b2 = new JButton("button2");
JButton b3 = new JButton("button3");
b3.putClientProperty(SubstanceLookAndFeel.FOCUS_KIND, FocusKind.ALL_INNER);
panel1.add(b1);
panel1.add(b2);
topPanel.add(panel1);
topPanel.add(b3);
In the code above:
- Button b1 will have
SubstanceConstants.FocusKind.NONE
focus kind which is set directly on the button. - Button b2 will have
SubstanceConstants.FocusKind.UNDERLINE
focus kind which is inherited from its topPanel parent. - Button b3 will have
SubstanceConstants.FocusKind.ALL_INNER
focus kind which is set directly on the button.
- Since:
- 2.2
- See Also:
- Button b1 will have
-
COMBO_POPUP_PROTOTYPE
Property name for specifying the combobox popup prototype display value which is used to compute the width of the popup at runtime. The property value should be one of:ComboPopupPrototypeCallback
- will provide application-specific logic at runtime.Object
- will point to the prototype entry itself.
This property can be set either on a specific
JComboBox
or globally onUIManager
.Here is an example of combo popup prototype set to a model element:
JComboBox comboProto1 = new JComboBox(new Object[] { "aa", "aaaaa",
"aaaaaaaaaa", "this one is the one", "aaaaaaaaaaaaaaaaaaaaa" });
comboProto1.setPrototypeDisplayValue("aaaaa");
comboProto1.putClientProperty(SubstanceLookAndFeel.COMBO_POPUP_PROTOTYPE,
"this one is the one");Here is an example of combo popup prototype set to a dynamic callback. This callback always returns the last model element:
JComboBox comboProto3 = new JComboBox(new Object[] { "aa", "aaaaa",
"this is not", "this one is not it",
"this one is it that is for the popup" });
comboProto3.setPrototypeDisplayValue("aaaaa");
comboProto3.putClientProperty(SubstanceLookAndFeel.COMBO_POPUP_PROTOTYPE,
new ComboPopupPrototypeCallback() {
public Object getPopupPrototypeDisplayValue(JComboBox jc) {
return jc.getModel().getElementAt(
jc.getModel().getSize() - 1);
}
});- Since:
- version 3.0
- See Also:
-
TRACE_FILE
VM property name for specifying the trace file. The trace file will contain output of the memory analyser which can be used to pinpoint the memory leaks. The property value is used as a filename for tracing the memory allocations. Example for specifying the trace file name:-Dsubstancelaf.traceFile=C:/temp/myApp.substance.log
- Since:
- version 2.0
- See Also:
-
PASSWORD_ECHO_PER_CHAR
Client property name for specifying the number of echo characters for each password character. The value should be an instance ofInteger
, otherwise will be ignored. This property can be set either on a specificJPasswordField
or globally onUIManager
.Example of having all password fields echo 3 characters per each typed user character:
UIManager.put(SubstanceLookAndFeel.PASSWORD_ECHO_PER_CHAR,
new Integer(3));Example of having a specific password field echo 2 characters per each typed user character:
JPasswordField jpf = new JPasswordField();
jpf.putClientProperty(SubstanceLookAndFeel.PASSWORD_ECHO_PER_CHAR,
new Integer(2));- Since:
- version 2.2
- See Also:
-
USE_THEMED_DEFAULT_ICONS
Client property name for specifying that icons on controls such as buttons, toggle buttons, labels, tabs and menu items should match the color of the current color scheme when they are in default state. The control is in default state when it's not pressed, not selected, not armed and not rolled over. The value should be an instance of
Boolean
. By default, all controls show regular (full-color original) icons. The value can be set globally onUIManager
.- Since:
- version 3.3
- See Also:
-
COLORIZATION_FACTOR
Client property name for specifying the colorization amount applied to the background and foreground of the current color scheme and the specific control. By default, when the application does not use any custom colors, all the controls are painted with the colors of the current color scheme / skin. The colors coming from the look-and-feel implement the marker
UIResource
interface which allows the UI delegates to differentiate between application-specific colors which are not changed, and the LAF-provide colors that are changed on LAF switch.This new client property installs the "smart colorization" mode which uses the colors of the current color scheme and the custom background / foreground colors (when installed by application) to colorize the relevant portions of the control. For example, on checkbox the custom background color will be used to colorize the check box itself, while the custom foreground color will be applied to the check box text and the check mark.
The value of this property specifies the actual colorization amount. Value of 0.0 results in Substance completely ignoring the custom application background and foreground colors set on the components - no colorization. Values closer to 1.0 result in almost full usage of the custom application background and foreground colors set on the components. Note that in order to maintain the gradients (fill, border, etc), even value of 1.0 does not result in full custom color being applied to the relevant visuals of the control.
This property can be specified globally on
UIManager
, applying on all controls, or on the specific component / container. In the later case, the value will be applied to the component / container itself and all its children that do not specify a custom value for this property.The default colorization amount (when this property is not set at all) is 0.5. This means that applications that install custom background / foreground colors on their UI controls will see them colorized with 50% "strength", even without setting this property.
The value should be an instance of
Double
in 0.0-1.0 range.Example of marking a button to have a custom background color and colorizing it with 40%:
JButton jb = new JButton("sample", myIcon);
jb.setBackground(Color.red);
jb.putClientProperty(SubstanceLookAndFeel.COLORIZATION_FACTOR,
new Double(0.4));Note that components in decoration areas registered on the current skin will ignore the colorization on custom background color. The background of such components is always painted by the skin's decoration painter to ensure consistent background painting of the relevant decoration area.
- Since:
- version 4.2
- See Also:
-
SUBSTANCE_FONT_POLICY_KEY
Internal client property name for storing application-specific font policy.- Since:
- version 3.3
- See Also:
-
SUBSTANCE_INPUT_MAP_SET_KEY
Internal client property name for storing application-specific input map set.- Since:
- version 6.1
- See Also:
-
BUTTON_SHAPER_PROPERTY
Property name for specifying outline shaper. This property is used a client property that can be set on a specific control.The value must be a
SubstanceButtonShaper
object.Example of using a
SubstanceButtonShaper
object as client property value:JButton b = new JButton("text");
b.putClientProperty(SubstanceLookAndFeel.BUTTON_SHAPER_PROPERTY,
new ClassicButtonShaper());- Since:
- version 2.1
- See Also:
-
SKIN_PROPERTY
Property name for specifying a skin to be used on the specific root pane. This property can only be installed on aJRootPane
and will affect all the controls in that root pane. The value must be an instance ofSubstanceSkin
. After setting this property, callSwingUtilities.updateComponentTreeUI(Component)
on the matching window.- Since:
- version 5.0
- See Also:
-
skin
The skin of this look-and-feel instance. -
name
The name of this look-and-feel instance.
-
-
Constructor Details
-
SubstanceLookAndFeel
Creates a new skin-based Substance look-and-feel. This is the only way to create an instance ofSubstanceLookAndFeel
class.- Parameters:
skin
- Skin.
-
-
Method Details
-
initPluginsIfNecessary
protected static void initPluginsIfNecessary()Initializes the plugins if necessary. -
getLabelBundle
Retrieves the current label bundle.- Returns:
- The current label bundle.
- See Also:
-
getLabelBundle
Retrieves the label bundle for the specified locale.- Parameters:
locale
- Locale.- Returns:
- The label bundle for the specified locale.
-
resetLabelBundle
public static void resetLabelBundle()Resets the current label bundle. Useful when the application changes Locale at runtime.- See Also:
-
getCurrentSkin
Returns the current global skin. If the current look-and-feel is not Substance, this method returnsnull
. This method is for internal use only. Applications should use thegetCurrentSkin(Component)
.- Returns:
- Current global skin.
- See Also:
-
getCurrentSkin
Returns the current skin for the specified component. If the current look-and-feel is not Substance, this method returnsnull
.- Parameters:
c
- Component. May benull
- in this case the global current Substance skin will be returned.- Returns:
- Current skin for the specified component.
- See Also:
-
getDescription
- Specified by:
getDescription
in classLookAndFeel
-
getID
- Specified by:
getID
in classLookAndFeel
-
getName
- Specified by:
getName
in classLookAndFeel
-
isNativeLookAndFeel
public boolean isNativeLookAndFeel()- Specified by:
isNativeLookAndFeel
in classLookAndFeel
-
isSupportedLookAndFeel
public boolean isSupportedLookAndFeel()- Specified by:
isSupportedLookAndFeel
in classLookAndFeel
-
initClassDefaults
- Overrides:
initClassDefaults
in classBasicLookAndFeel
-
initComponentDefaults
- Overrides:
initComponentDefaults
in classBasicLookAndFeel
-
setFontPolicy
Sets theFontPolicy
to be used with Substance family. If the specified policy isnull
, the default will be reset. This method does not require Substance to be the current look-and-feel, and will cause Substance to be set as the current application look-and-feel.- Parameters:
fontPolicy
- TheFontPolicy
to be used with Substance family, ornull
to reset to the default- See Also:
-
getFontPolicy
Looks up and retrieves theFontPolicy
used by the Substance family. If aFontPolicy
has been set, it'll be returned. Otherwise, this method checks if aFontPolicy
orFontSet
is defined in the system properties or UIDefaults. If so, it is returned. If noFontPolicy
has been set for this look, in the system properties orUIDefaults
, the default Substance font policy will be returned.- Returns:
- the
FontPolicy
set for this Look&feel - if any, theFontPolicy
specified in the system properties orUIDefaults
- if any, or the default Substance font policy. - See Also:
-
setInputMapSet
Sets theInputMapSet
to be used with Substance family. If the specified set isnull
, the default will be reset. This method does not require Substance to be the current look-and-feel, and will cause Substance to be set as the current application look-and-feel.- Parameters:
inputMapSet
- TheInputMapSet
to be used with Substance family, ornull
to reset to the default- See Also:
-
getInputMapSet
Looks up and retrieves theInputMapSet
used by the Substance family. If aInputMapSet
has been set, it'll be returned. If noInputMapSet
has been set for this look, the default Substance input map set will be returned.- Returns:
- the
InputMapSet
set for this Look&feel - if any, or the default Substance input map set. - See Also:
-
getDefaults
- Overrides:
getDefaults
in classBasicLookAndFeel
-
initialize
public void initialize()- Overrides:
initialize
in classBasicLookAndFeel
-
uninitialize
public void uninitialize()- Overrides:
uninitialize
in classBasicLookAndFeel
-
registerSkinChangeListener
Registers a new listener on skin change.- Parameters:
skinChangeListener
- New listener on skin change.- See Also:
-
unregisterSkinChangeListener
Unregisters a listener on skin change.- Parameters:
skinChangeListener
- The listener to unregister.- See Also:
-
registerTabCloseChangeListener
Registers the specified listener on tab-close events on all tabbed panes.- Parameters:
tabCloseListener
- Listener to register.- See Also:
-
registerTabCloseChangeListener
public static void registerTabCloseChangeListener(JTabbedPane tabbedPane, BaseTabCloseListener tabCloseListener) Registers the specified listener on tab-close events on the specified tabbed pane.- Parameters:
tabbedPane
- Tabbed pane. Ifnull
, the tab close listener is registered globally (for all tabbed panes).tabCloseListener
- Listener to register.- See Also:
-
unregisterTabCloseChangeListener
Unregisters the specified listener on tab-close events on all tabbed panes.- Parameters:
tabCloseListener
- Listener to unregister.- See Also:
-
unregisterTabCloseChangeListener
public static void unregisterTabCloseChangeListener(JTabbedPane tabbedPane, BaseTabCloseListener tabCloseListener) Unregisters the specified listener on tab-close events on the specified tabbed pane.- Parameters:
tabbedPane
- Tabbed pane. Ifnull
, the tab close listener is unregistered globally (for all tabbed panes).tabCloseListener
- Listener to unregister.- See Also:
-
getAllTabCloseListeners
Returns the set of all listeners registered on tab-close events on all tabbed panes.- Returns:
- Set of all listeners registered on tab-close events on all tabbed panes.
-
getAllTabCloseListeners
Returns all listeners registered on tab closing of the specified tabbed pane.- Parameters:
tabbedPane
- A tabbed pane. Ifnull
, all globally registered tab close listeners are returned.- Returns:
- All listeners registered on tab closing of the specified tabbed pane.
-
registerLocaleChangeListener
Registers a new listener on locale change.- Parameters:
localeListener
- New listener on locale change.
-
unregisterLocaleChangeListener
Unregisters a listener on locale change.- Parameters:
localeListener
- The listener to unregister.
-
getLocaleListeners
Returns all listeners registered on locale change.- Returns:
- All listeners registered on locale change.
-
setWidgetVisible
public static void setWidgetVisible(JRootPane rootPane, boolean visible, SubstanceConstants.SubstanceWidgetType... substanceWidgets) Sets the visibility of the specified widget kind(s). If the firstrootPane
parameter isnull
, this call applies to all root panes. This method should not be called from inside the initialization sequence of your window. If the specific widget needs to be visible when the window is shown, wrap the call withSwingUtilities.invokeLater(Runnable)
.- Parameters:
rootPane
- Root pane. May benull
.visible
- Visibility indication.substanceWidgets
- Widget types.- Since:
- version 5.0
-
isToUseConstantThemesOnDialogs
public static boolean isToUseConstantThemesOnDialogs()Checks whether theJOptionPane
s created with predefined message types should use constant color schemes for the icons.- Returns:
true
if theJOptionPane
s created with predefined message types should use constant color schemes for the icons,false
otherwise.- See Also:
-
setToUseConstantThemesOnDialogs
public static void setToUseConstantThemesOnDialogs(boolean toUseConstantThemesOnDialogs) Sets the new setting for the icons of theJOptionPane
s created with predefined message types.- Parameters:
toUseConstantThemesOnDialogs
- iftrue
, theJOptionPane
s created with predefined message types should use constant color schemes for the icons.- See Also:
-
setSkin
Sets the specified skin. If the current look-and-feel is not Substance, this method will create a new Substance look-and-feel based on the specified skin and set it onUIManager
. This method does not require Substance to be the current look-and-feel. Calling this method will callSwingUtilities.updateComponentTreeUI(Component)
on all open top-level windows.- Parameters:
newSkin
- Skin to set.- Returns:
true
if the specified skin has been set successfully,false
otherwise.- Throws:
IllegalStateException
- When called outside the Event Dispatch Thread.- See Also:
-
setSkin
Sets the specified skin. If the current look-and-feel is not Substance, this method will create a new Substance look-and-feel based on the specified skin and set it onUIManager
. This method does not require Substance to be the current look-and-feel. Calling this method will callSwingUtilities.updateComponentTreeUI(Component)
on all open top-level windows.- Parameters:
skinClassName
- Skin to set.- Returns:
true
if the specified skin has been set successfully,false
otherwise.- Throws:
IllegalStateException
- When called outside the Event Dispatch Thread.- Since:
- version 3.1
- See Also:
-
getAllSkins
Returns all available skins.- Returns:
- All available skins. Key - skin display name, value - skin information.
-
getSupportsWindowDecorations
public boolean getSupportsWindowDecorations()- Overrides:
getSupportsWindowDecorations
in classLookAndFeel
-
setLabelBundleClassLoader
Sets the class loader forLABEL_BUNDLE
.- Parameters:
labelBundleClassLoader
- Class loader forLABEL_BUNDLE
.- Since:
- version 3.1
-
getTitlePaneComponent
Returns the title pane of the specified top-level window. -
setDecorationType
Sets the decoration type of the specified component and all its children.- Parameters:
comp
- Component.type
- Decoration type of the component and all its children.
-
getDecorationType
Returns the decoration area type of the specified component. The component and its ancestor hierarchy are scanned for the registered decoration area type. IfsetDecorationType(JComponent, DecorationAreaType)
has been called on the specified component, the matching decoration type is returned. Otherwise, the component hierarchy is scanned to find the closest ancestor that was passed tosetDecorationType(JComponent, DecorationAreaType)
- and its decoration type is returned. If neither the component, nor any one of its parent components has been passed to the setter method,DecorationAreaType.NONE
is returned.- Parameters:
comp
- Component.- Returns:
- Decoration area type of the component.
-
getImmediateDecorationType
Returns the immediate decoration area type of the specified component. The component is checked for the registered decoration area type. IfsetDecorationType(javax.swing.JComponent, DecorationAreaType)
was not called on this component, this method returnsnull
.- Parameters:
comp
- Component.- Returns:
- Immediate decoration area type of the component.
-
isCurrentLookAndFeel
public static boolean isCurrentLookAndFeel()Checks whether Substance is the current look-and-feel. This method is for internal use only.- Returns:
true
if Substance is the current look-and-feel,false
otherwise.
-
getDisabledIcon
- Overrides:
getDisabledIcon
in classLookAndFeel
-