|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectjavax.swing.LookAndFeel
javax.swing.plaf.basic.BasicLookAndFeel
org.pushingpixels.substance.api.SubstanceLookAndFeel
public abstract class SubstanceLookAndFeel
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:
org.pushingpixels.substance.skin
package.SubstanceLookAndFeel(SubstanceSkin)
constructor.
setSkin(String)
or
setSkin(SubstanceSkin)
static methods. These
methods do not require Substance to be the current look-and-feel.
Field Summary | |
---|---|
static java.lang.String |
BUTTON_NO_MIN_SIZE_PROPERTY
Client property name for ignoring the default (minimum) dimension for a single button. |
static java.lang.String |
BUTTON_OPEN_SIDE_PROPERTY
Client property name for specifying an open side for a single button. |
static java.lang.String |
BUTTON_PAINT_NEVER_PROPERTY
Client property name for specifying that a single button / all application buttons should not paint the background. |
static java.lang.String |
BUTTON_SHAPER_PROPERTY
Property name for specifying outline shaper. |
static java.lang.String |
BUTTON_SIDE_PROPERTY
Client property name for specifying a straight side for a single button. |
static java.lang.String |
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. |
static java.lang.String |
COMBO_BOX_POPUP_FLYOUT_ORIENTATION
Client property name for specifying combo popup flyout orientation. |
static java.lang.String |
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. |
static java.lang.String |
CORNER_RADIUS
Client property name for specifying the corner radius for buttons. |
protected java.awt.KeyboardFocusManager |
currentKeyboardFocusManager
The current keyboard focus manager - fix for defect 208. |
static java.lang.String |
FLAT_PROPERTY
Property name for specifying that the component should be painted flat (no background / border) when it's inactive. |
static java.lang.String |
FOCUS_KIND
Client property name for specifying the kind of focus indication on buttons, check boxes and radio buttons. |
protected java.beans.PropertyChangeListener |
focusOwnerChangeListener
Change listener on keyboard focus manager - fix for defect 208. |
static java.lang.String |
HEAP_STATUS_TRACE_FILE
VM property name for specifying the heap status trace file. |
protected static java.util.Set<LocaleChangeListener> |
localeChangeListeners
List of all listeners on changing locales. |
static java.lang.String |
MENU_GUTTER_FILL_KIND
Property name for specifying menu gutter fill kind. |
protected java.lang.String |
name
The name of this look-and-feel instance. |
static java.lang.String |
PASSWORD_ECHO_PER_CHAR
Client property name for specifying the number of echo characters for each password character. |
static java.lang.String |
PLUGIN_XML
The name of plugin configuration XML resource name. |
static java.lang.String |
SCROLL_PANE_BUTTONS_POLICY
Client property name for specifying scroll pane button policy. |
static java.lang.String |
SHOW_EXTRA_WIDGETS
Property name for specifying that extra UI elements (such as menu items in system menu or lock borders) should be shown. |
protected SubstanceSkin |
skin
The skin of this look-and-feel instance. |
static java.lang.String |
SKIN_PROPERTY
Property name for specifying a skin to be used on the specific root pane. |
protected static java.util.Set<SkinChangeListener> |
skinChangeListeners
List of all listeners on skin changes. |
protected static java.lang.String |
SUBSTANCE_FONT_POLICY_KEY
Internal client property name for storing application-specific font policy. |
protected static java.lang.String |
SUBSTANCE_INPUT_MAP_SET_KEY
Internal client property name for storing application-specific input map set. |
static java.lang.String |
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. |
static java.lang.String |
TABBED_PANE_CLOSE_BUTTONS_PROPERTY
Client property name for adding close buttons on tabs. |
static java.lang.String |
TABBED_PANE_CLOSE_CALLBACK
Client property name for specifying the callback for deciding on the tab close type. |
static java.lang.String |
TABBED_PANE_CONTENT_BORDER_KIND
Client property name for specifying the content pane border kind. |
static java.lang.String |
TRACE_FILE
VM property name for specifying the trace file. |
static org.pushingpixels.lafwidget.animation.AnimationFacet |
TREE_SMART_SCROLL_ANIMATION_KIND
Smart tree scroll animation facet. |
static java.lang.String |
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. |
static java.lang.String |
WATERMARK_VISIBLE
Client property name for requesting that watermark should be painted on the component and its descendants. |
static java.lang.String |
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. |
static java.lang.String |
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. |
static java.lang.String |
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. |
static java.lang.String |
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. |
Constructor Summary | |
---|---|
protected |
SubstanceLookAndFeel(SubstanceSkin skin)
Creates a new skin-based Substance look-and-feel. |
Method Summary | |
---|---|
static java.util.Map<java.lang.String,SkinInfo> |
getAllSkins()
Returns all available skins. |
static java.util.Set<BaseTabCloseListener> |
getAllTabCloseListeners()
Returns the set of all listeners registered on tab-close events on all tabbed panes. |
static java.util.Set<BaseTabCloseListener> |
getAllTabCloseListeners(javax.swing.JTabbedPane tabbedPane)
Returns all listeners registered on tab closing of the specified tabbed pane. |
static SubstanceSkin |
getCurrentSkin()
Returns the current global skin. |
static SubstanceSkin |
getCurrentSkin(java.awt.Component c)
Returns the current skin for the specified component. |
static DecorationAreaType |
getDecorationType(java.awt.Component comp)
Returns the decoration area type of the specified component. |
javax.swing.UIDefaults |
getDefaults()
|
java.lang.String |
getDescription()
|
javax.swing.Icon |
getDisabledIcon(javax.swing.JComponent component,
javax.swing.Icon icon)
|
static FontPolicy |
getFontPolicy()
Looks up and retrieves the FontPolicy used by the Substance
family. |
java.lang.String |
getID()
|
static DecorationAreaType |
getImmediateDecorationType(java.awt.Component comp)
Returns the immediate decoration area type of the specified component. |
static InputMapSet |
getInputMapSet()
Looks up and retrieves the InputMapSet used by the Substance
family. |
static java.util.ResourceBundle |
getLabelBundle()
Retrieves the current label bundle. |
static java.util.ResourceBundle |
getLabelBundle(java.util.Locale locale)
Retrieves the label bundle for the specified locale. |
static java.util.Set<LocaleChangeListener> |
getLocaleListeners()
Returns all listeners registered on locale change. |
java.lang.String |
getName()
|
boolean |
getSupportsWindowDecorations()
|
static javax.swing.JComponent |
getTitlePaneComponent(java.awt.Window window)
Returns the title pane of the specified top-level window. |
protected void |
initClassDefaults(javax.swing.UIDefaults table)
|
protected void |
initComponentDefaults(javax.swing.UIDefaults table)
|
void |
initialize()
|
protected static void |
initPluginsIfNecessary()
Initializes the plugins if necessary. |
static boolean |
isCurrentLookAndFeel()
Checks whether Substance is the current look-and-feel. |
boolean |
isNativeLookAndFeel()
|
boolean |
isSupportedLookAndFeel()
|
static boolean |
isToUseConstantThemesOnDialogs()
Checks whether the JOptionPane 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(BaseTabCloseListener tabCloseListener)
Registers the specified listener on tab-close events on all tabbed panes. |
static void |
registerTabCloseChangeListener(javax.swing.JTabbedPane tabbedPane,
BaseTabCloseListener tabCloseListener)
Registers the specified listener on tab-close events on the specified tabbed pane. |
static void |
resetLabelBundle()
Resets the current label bundle. |
static void |
setDecorationType(javax.swing.JComponent comp,
DecorationAreaType type)
Sets the decoration type of the specified component and all its children. |
static void |
setFontPolicy(FontPolicy fontPolicy)
Sets the FontPolicy to be used with Substance family. |
static void |
setInputMapSet(InputMapSet inputMapSet)
Sets the InputMapSet to be used with Substance family. |
static void |
setLabelBundleClassLoader(java.lang.ClassLoader labelBundleClassLoader)
Sets the class loader for LABEL_BUNDLE . |
static boolean |
setSkin(java.lang.String skinClassName)
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 the JOptionPane s
created with predefined message types. |
static void |
setWidgetVisible(javax.swing.JRootPane rootPane,
boolean visible,
SubstanceConstants.SubstanceWidgetType... substanceWidgets)
Sets the visibility of the specified widget kind(s). |
void |
uninitialize()
|
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(BaseTabCloseListener tabCloseListener)
Unregisters the specified listener on tab-close events on all tabbed panes. |
static void |
unregisterTabCloseChangeListener(javax.swing.JTabbedPane tabbedPane,
BaseTabCloseListener tabCloseListener)
Unregisters the specified listener on tab-close events on the specified tabbed pane. |
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 |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
public static final java.lang.String PLUGIN_XML
protected static final java.util.Set<SkinChangeListener> skinChangeListeners
protected static final java.util.Set<LocaleChangeListener> localeChangeListeners
protected java.beans.PropertyChangeListener focusOwnerChangeListener
protected java.awt.KeyboardFocusManager currentKeyboardFocusManager
public static final org.pushingpixels.lafwidget.animation.AnimationFacet TREE_SMART_SCROLL_ANIMATION_KIND
AnimationConfigurationManager.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).
public static final java.lang.String WATERMARK_VISIBLE
UIManager
. The value should be either Boolean.TRUE
or
Boolean.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 the UIManager
.
public static final java.lang.String BUTTON_NO_MIN_SIZE_PROPERTY
UIManager
. The value should be either
Boolean.TRUE
or Boolean.FALSE
.
Note that SubstanceButtonShaper
implementations are not required
to respect this property. The current implementations of the default
StandardButtonShaper
and ClassicButtonShaper
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);
public static final java.lang.String BUTTON_PAINT_NEVER_PROPERTY
UIManager
. The value should be either Boolean.TRUE
or
Boolean.FALSE
. Note that unlike the FLAT_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);
FLAT_PROPERTY
,
Constant Field Valuespublic static final java.lang.String BUTTON_SIDE_PROPERTY
SubstanceConstants.Side
enum.
SubstanceConstants.Side
enum.
Note that the SubstanceButtonShaper
implementations are not
required to respect this property. The default
StandardButtonShaper
and ClassicButtonShaper
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);
BUTTON_OPEN_SIDE_PROPERTY
,
Constant Field Valuespublic static final java.lang.String BUTTON_OPEN_SIDE_PROPERTY
SubstanceConstants.Side
enum.
SubstanceConstants.Side
enum.
Example of marking a button to have open top and west sides:
JButton button = new JButton("text");
Set openSides = EnumSet.of(Side.TOP, Side.WEST);
button.putClientProperty(SubstanceLookAndFeel.BUTTON_OPEN_SIDE_PROPERTY,
openSides);
BUTTON_SIDE_PROPERTY
,
Constant Field Valuespublic static final java.lang.String CORNER_RADIUS
UIManager
. The value should be a positive Float
.
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));
public static final java.lang.String FLAT_PROPERTY
Boolean.TRUE
or Boolean.FALSE
value.
Example how to mark a button to appear flat:
JButton button = new JButton("text");
button.putClientProperty(SubstanceLookAndFeel.FLAT_PROPERTY,
Boolean.TRUE);
BUTTON_PAINT_NEVER_PROPERTY
,
Constant Field Valuespublic static final java.lang.String HEAP_STATUS_TRACE_FILE
-Dsubstancelaf.heapStatusTraceFile=C:/temp/myApp.heap.log
public static final java.lang.String WINDOW_MODIFIED
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 a
JInternalFrame
and that frame is iconified (to a
JInternalFrame.JDesktopIcon
), the close button of the its desktop
icon is animated as well.JComponent
in a JTabbedPane
. Based on the
TABBED_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);
}
}
public static final java.lang.String 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
either Boolean.TRUE
or Boolean.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);
public static final java.lang.String 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
public static final java.lang.String 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
or Boolean.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
public static final java.lang.String TABBED_PANE_CLOSE_BUTTONS_PROPERTY
JTabbedPane
itself
(will hold for all tab components that don't define this property) or on
UIManager
. The value should be either Boolean.TRUE
or
Boolean.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).
TABBED_PANE_CLOSE_BUTTONS_MODIFIED_ANIMATION
,
TABBED_PANE_CLOSE_CALLBACK
,
Constant Field Valuespublic static final java.lang.String TABBED_PANE_CLOSE_BUTTONS_MODIFIED_ANIMATION
JTabbedPane
itself
(will hold for all tab components that don't define this property) or on
UIManager
. The value should be either Boolean.TRUE
or
Boolean.FALSE
. By default, the animation on modified tabs is on
the entire tab rectangle. Note that this setting is only relevant for
tabs marked with WINDOW_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).
TABBED_PANE_CLOSE_BUTTONS_PROPERTY
,
TABBED_PANE_CLOSE_CALLBACK
,
Constant Field Valuespublic static final java.lang.String TABBED_PANE_CLOSE_CALLBACK
JTabbedPane
itself (will hold for all tab components that don't
define this property) or on UIManager
. The value should be an
instance of TabCloseCallback
. Note that this setting is only
relevant for tabs marked with TABBED_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);
public static final java.lang.String TABBED_PANE_CONTENT_BORDER_KIND
JTabbedPane
or on
UIManager
. The value should be one of
SubstanceConstants.TabContentPaneBorderKind
enum. By default, the
border kind is
SubstanceConstants.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);
public static final java.lang.String COMBO_BOX_POPUP_FLYOUT_ORIENTATION
JComboBox
or globally on
UIManager
. The value should be one of the Integer
s below:
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);
COMBO_POPUP_PROTOTYPE
,
Constant Field Valuespublic static final java.lang.String SCROLL_PANE_BUTTONS_POLICY
JScrollPane
or globally
on UIManager
. The value should be one of the
SubstanceConstants.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);
public static final java.lang.String SHOW_EXTRA_WIDGETS
UIManager
or as a client property on a
specific component. The value should be either Boolean.TRUE
or
Boolean.FALSE
.
Example of setting this property on UIManager
:
UIManager.put(SubstanceLookAndFeel.SHOW_EXTRA_WIDGETS, Boolean.TRUE);
SwingUtilities.updateComponentTree(myFrame);
public static final java.lang.String MENU_GUTTER_FILL_KIND
SubstanceConstants.MenuGutterFillKind
enum. This property can be set
globally on the UIManager
. The default value is
SubstanceConstants.MenuGutterFillKind.HARD
.
Example of setting soft fill kind:
UIManager.put(SubstanceLookAndFeel.MENU_GUTTER_FILL_KIND, MenuGutterFillKind.SOFT);
public static final java.lang.String FOCUS_KIND
SubstanceConstants.FocusKind
enum. This property can be set
either on the specific component or as global property on
UIManager
.
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 default
SubstanceConstants.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:
SubstanceConstants.FocusKind.NONE
focus kind which is set directly on the button.
SubstanceConstants.FocusKind.UNDERLINE
focus kind which is
inherited from its topPanel parent.
SubstanceConstants.FocusKind.ALL_INNER
focus kind which is set
directly on the button.
SubstanceConstants.FocusKind
,
Constant Field Valuespublic static final java.lang.String COMBO_POPUP_PROTOTYPE
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 on UIManager
.
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);
}
});
COMBO_BOX_POPUP_FLYOUT_ORIENTATION
,
Constant Field Valuespublic static final java.lang.String TRACE_FILE
-Dsubstancelaf.traceFile=C:/temp/myApp.substance.log
public static final java.lang.String PASSWORD_ECHO_PER_CHAR
Integer
, otherwise will be ignored. This property can be set
either on a specific JPasswordField
or globally on
UIManager
.
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));
public static final java.lang.String 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 on UIManager
.
public static final java.lang.String 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.
Component.setBackground(Color)
,
Component.setForeground(Color)
,
Constant Field Valuesprotected static final java.lang.String SUBSTANCE_FONT_POLICY_KEY
setFontPolicy(FontPolicy)
,
getFontPolicy()
,
Constant Field Valuesprotected static final java.lang.String SUBSTANCE_INPUT_MAP_SET_KEY
setInputMapSet(InputMapSet)
,
getInputMapSet()
,
Constant Field Valuespublic static final java.lang.String BUTTON_SHAPER_PROPERTY
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());
public static final java.lang.String SKIN_PROPERTY
JRootPane
and will
affect all the controls in that root pane. The value must be an instance
of SubstanceSkin
. After setting this property, call
SwingUtilities.updateComponentTreeUI(Component)
on the matching
window.
getCurrentSkin(Component)
,
Constant Field Valuesprotected SubstanceSkin skin
protected java.lang.String name
Constructor Detail |
---|
protected SubstanceLookAndFeel(SubstanceSkin skin)
SubstanceLookAndFeel
class.
skin
- Skin.Method Detail |
---|
protected static void initPluginsIfNecessary()
public static java.util.ResourceBundle getLabelBundle()
resetLabelBundle()
public static java.util.ResourceBundle getLabelBundle(java.util.Locale locale)
locale
- Locale.
public static void resetLabelBundle()
getLabelBundle()
public static SubstanceSkin getCurrentSkin()
null
. This method is for
internal use only. Applications should use the
getCurrentSkin(Component)
.
getCurrentSkin(Component)
public static SubstanceSkin getCurrentSkin(java.awt.Component c)
null
.
c
- Component. May be null
- in this case the global
current Substance skin will be returned.
SKIN_PROPERTY
,
getCurrentSkin()
public java.lang.String getDescription()
getDescription
in class javax.swing.LookAndFeel
public java.lang.String getID()
getID
in class javax.swing.LookAndFeel
public java.lang.String getName()
getName
in class javax.swing.LookAndFeel
public boolean isNativeLookAndFeel()
isNativeLookAndFeel
in class javax.swing.LookAndFeel
public boolean isSupportedLookAndFeel()
isSupportedLookAndFeel
in class javax.swing.LookAndFeel
protected void initClassDefaults(javax.swing.UIDefaults table)
initClassDefaults
in class javax.swing.plaf.basic.BasicLookAndFeel
protected void initComponentDefaults(javax.swing.UIDefaults table)
initComponentDefaults
in class javax.swing.plaf.basic.BasicLookAndFeel
public static void setFontPolicy(FontPolicy fontPolicy)
FontPolicy
to be used with Substance family. If the
specified policy is null
, 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.
fontPolicy
- The FontPolicy
to be used with Substance family, or
null
to reset to the defaultgetFontPolicy()
,
SUBSTANCE_FONT_POLICY_KEY
public static FontPolicy getFontPolicy()
FontPolicy
used by the Substance
family. If a FontPolicy
has been set, it'll be returned.
Otherwise, this method checks if a FontPolicy
or FontSet
is defined in the system properties or UIDefaults. If so, it is returned.
If no FontPolicy
has been set for this look, in the system
properties or UIDefaults
, the default Substance font policy will
be returned.
FontPolicy
set for this Look&feel - if any, the
FontPolicy
specified in the system properties or
UIDefaults
- if any, or the default Substance font
policy.setFontPolicy(org.pushingpixels.substance.api.fonts.FontPolicy)
,
FontPolicies
,
FontPolicies.customSettingsPolicy(FontPolicy)
public static void setInputMapSet(InputMapSet inputMapSet)
InputMapSet
to be used with Substance family. If the
specified set is null
, 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.
inputMapSet
- The InputMapSet
to be used with Substance family, or
null
to reset to the defaultgetInputMapSet()
,
SUBSTANCE_INPUT_MAP_SET_KEY
public static InputMapSet getInputMapSet()
InputMapSet
used by the Substance
family. If a InputMapSet
has been set, it'll be returned. If no
InputMapSet
has been set for this look, the default Substance
input map set will be returned.
InputMapSet
set for this Look&feel - if any, or
the default Substance input map set.setInputMapSet(InputMapSet)
public javax.swing.UIDefaults getDefaults()
getDefaults
in class javax.swing.plaf.basic.BasicLookAndFeel
public void initialize()
initialize
in class javax.swing.plaf.basic.BasicLookAndFeel
public void uninitialize()
uninitialize
in class javax.swing.plaf.basic.BasicLookAndFeel
public static void registerSkinChangeListener(SkinChangeListener skinChangeListener)
skinChangeListener
- New listener on skin change.setSkin(String)
,
setSkin(SubstanceSkin)
,
unregisterSkinChangeListener(SkinChangeListener)
public static void unregisterSkinChangeListener(SkinChangeListener skinChangeListener)
skinChangeListener
- The listener to unregister.setSkin(String)
,
setSkin(SubstanceSkin)
,
registerSkinChangeListener(SkinChangeListener)
public static void registerTabCloseChangeListener(BaseTabCloseListener tabCloseListener)
tabCloseListener
- Listener to register.registerTabCloseChangeListener(JTabbedPane, BaseTabCloseListener)
,
unregisterTabCloseChangeListener(BaseTabCloseListener)
,
unregisterTabCloseChangeListener(JTabbedPane, BaseTabCloseListener)
public static void registerTabCloseChangeListener(javax.swing.JTabbedPane tabbedPane, BaseTabCloseListener tabCloseListener)
tabbedPane
- Tabbed pane. If null
, the tab close listener is
registered globally (for all tabbed panes).tabCloseListener
- Listener to register.registerTabCloseChangeListener(BaseTabCloseListener)
,
unregisterTabCloseChangeListener(BaseTabCloseListener)
,
unregisterTabCloseChangeListener(JTabbedPane, BaseTabCloseListener)
public static void unregisterTabCloseChangeListener(BaseTabCloseListener tabCloseListener)
tabCloseListener
- Listener to unregister.registerTabCloseChangeListener(BaseTabCloseListener)
,
registerTabCloseChangeListener(JTabbedPane, BaseTabCloseListener)
,
unregisterTabCloseChangeListener(JTabbedPane, BaseTabCloseListener)
public static void unregisterTabCloseChangeListener(javax.swing.JTabbedPane tabbedPane, BaseTabCloseListener tabCloseListener)
tabbedPane
- Tabbed pane. If null
, the tab close listener is
unregistered globally (for all tabbed panes).tabCloseListener
- Listener to unregister.registerTabCloseChangeListener(BaseTabCloseListener)
,
registerTabCloseChangeListener(JTabbedPane, BaseTabCloseListener)
,
unregisterTabCloseChangeListener(BaseTabCloseListener)
public static java.util.Set<BaseTabCloseListener> getAllTabCloseListeners()
public static java.util.Set<BaseTabCloseListener> getAllTabCloseListeners(javax.swing.JTabbedPane tabbedPane)
tabbedPane
- A tabbed pane. If null
, all globally registered
tab close listeners are returned.
public static void registerLocaleChangeListener(LocaleChangeListener localeListener)
localeListener
- New listener on locale change.public static void unregisterLocaleChangeListener(LocaleChangeListener localeListener)
localeListener
- The listener to unregister.public static java.util.Set<LocaleChangeListener> getLocaleListeners()
public static void setWidgetVisible(javax.swing.JRootPane rootPane, boolean visible, SubstanceConstants.SubstanceWidgetType... substanceWidgets)
rootPane
parameter is null
, 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 with
SwingUtilities.invokeLater(Runnable)
.
rootPane
- Root pane. May be null
.visible
- Visibility indication.substanceWidgets
- Widget types.public static boolean isToUseConstantThemesOnDialogs()
JOptionPane
s created with predefined
message types should use constant color schemes for the icons.
true
if the JOptionPane
s created with
predefined message types should use constant color schemes for
the icons, false
otherwise.setToUseConstantThemesOnDialogs(boolean)
public static void setToUseConstantThemesOnDialogs(boolean toUseConstantThemesOnDialogs)
JOptionPane
s
created with predefined message types.
toUseConstantThemesOnDialogs
- if true
, the JOptionPane
s created
with predefined message types should use constant color
schemes for the icons.isToUseConstantThemesOnDialogs()
public static boolean setSkin(SubstanceSkin newSkin)
UIManager
. This method does not
require Substance to be the current look-and-feel. Calling this method
will call SwingUtilities.updateComponentTreeUI(Component)
on all
open top-level windows.
newSkin
- Skin to set.
true
if the specified skin has been set
successfully, false
otherwise.
java.lang.IllegalStateException
- When called outside the Event Dispatch Thread.registerSkinChangeListener(SkinChangeListener)
,
unregisterSkinChangeListener(SkinChangeListener)
,
SubstanceSkin.isValid()
public static boolean setSkin(java.lang.String skinClassName)
UIManager
. This method does not
require Substance to be the current look-and-feel. Calling this method
will call SwingUtilities.updateComponentTreeUI(Component)
on all
open top-level windows.
skinClassName
- Skin to set.
true
if the specified skin has been set
successfully, false
otherwise.
java.lang.IllegalStateException
- When called outside the Event Dispatch Thread.setSkin(SubstanceSkin)
,
registerSkinChangeListener(SkinChangeListener)
,
unregisterSkinChangeListener(SkinChangeListener)
,
SubstanceSkin.isValid()
public static java.util.Map<java.lang.String,SkinInfo> getAllSkins()
public boolean getSupportsWindowDecorations()
getSupportsWindowDecorations
in class javax.swing.LookAndFeel
public static void setLabelBundleClassLoader(java.lang.ClassLoader labelBundleClassLoader)
LABEL_BUNDLE
.
labelBundleClassLoader
- Class loader for LABEL_BUNDLE
.public static javax.swing.JComponent getTitlePaneComponent(java.awt.Window window)
window
- Top-level window.
JFrame
or JDialog
and
has custom decorations, the result is the title pane,
null
otherwise.public static void setDecorationType(javax.swing.JComponent comp, DecorationAreaType type)
comp
- Component.type
- Decoration type of the component and all its children.public static DecorationAreaType getDecorationType(java.awt.Component comp)
setDecorationType(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 to
setDecorationType(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.
comp
- Component.
public static DecorationAreaType getImmediateDecorationType(java.awt.Component comp)
setDecorationType(javax.swing.JComponent, DecorationAreaType)
was
not called on this component, this method returns null
.
comp
- Component.
public static boolean isCurrentLookAndFeel()
true
if Substance is the current look-and-feel,
false
otherwise.public javax.swing.Icon getDisabledIcon(javax.swing.JComponent component, javax.swing.Icon icon)
getDisabledIcon
in class javax.swing.LookAndFeel
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |