# Class SynthLookAndFeel

java.lang.Object
javax.swing.LookAndFeel
javax.swing.plaf.basic.BasicLookAndFeel
javax.swing.plaf.synth.SynthLookAndFeel

All Implemented Interfaces:
  `Serializable`

Direct Known Subclasses:
  `NimbusLookAndFeel`

public class SynthLookAndFeel extends BasicLookAndFeel
SynthLookAndFeel provides the basis for creating a customized look and feel. SynthLookAndFeel does not directly provide a look, all painting is delegated. You need to either provide a configuration file, by way of the `load(InputStream, Class)` method, or provide your own `SynthStyleFactory` to `setStyleFactory(SynthStyleFactory)`. Refer to the package summary for an example of loading a file, and `SynthStyleFactory` for an example of providing your own `SynthStyleFactory` to `setStyleFactory`.

`SynthIcon` interface provides `paintIcon(synthContext, graphics, x, y, width, height)` method that allows to draw the icon with the given `SynthContext`.

Warning: This class implements `Serializable` as a side effect of it extending `BasicLookAndFeel`. It is not intended to be serialized. An attempt to serialize it will result in `NotSerializableException`.

Since:
  1.5

## Constructor Summary

Constructors
Constructor
Description
`SynthLookAndFeel()`
Creates a SynthLookAndFeel.

## Method Summary

Modifier and Type
Method
Description
`static ComponentUI`
`createUI(JComponent c)`
Creates the Synth look and feel `ComponentUI` for the passed in `JComponent`.
`UIDefaults`
`getDefaults()`
Returns the defaults for this SynthLookAndFeel.
`String`
`getDescription()`
Returns a textual description of SynthLookAndFeel.
`String`
`getID()`
Return a string that identifies this look and feel.
`String`
`getName()`
Return a short string that identifies this look and feel.
`static Region`
`getRegion(JComponent c)`
Returns the Region for the JComponent `c`.
`static SynthStyle`
`getStyle(JComponent c, Region region)`
Gets a SynthStyle for the specified region of the specified component.
`static SynthStyleFactory`
`getStyleFactory()`
Returns the current SynthStyleFactory.
`void`
`initialize()`
Called by UIManager when this look and feel is installed.
`boolean`
`isNativeLookAndFeel()`
Returns false, SynthLookAndFeel is not a native look and feel.
`boolean`
`isSupportedLookAndFeel()`
Returns true, SynthLookAndFeel is always supported.
`void`
`load(InputStream input, Class<?> resourceBase)`
Loads the set of `SynthStyle`s that will be used by this `SynthLookAndFeel`.
`static void`
`setStyleFactory(SynthStyleFactory cache)`
Sets the SynthStyleFactory that the UI classes provided by synth will use to obtain a SynthStyle.
`boolean`
`shouldUpdateStyleOnAncestorChanged()`
Returns whether or not the UIs should update their `SynthStyles` from the `SynthStyleFactory` when the ancestor of the `JComponent` changes.
`protected boolean`
`shouldUpdateStyleOnEvent(PropertyChangeEvent ev)`
Returns whether or not the UIs should update their styles when a particular event occurs.
`void`
`uninitialize()`
Called by UIManager when this look and feel is uninstalled.
`static void`
`updateStyles(Component c)`
Updates the style associated with `c`, and all its children.

### Methods declared in class BasicLookAndFeel

`createAudioAction, getAudioActionMap, initClassDefaults, initComponentDefaults, initSystemColorDefaults, loadSystemColors, playSound`
Modifier and Type
Method
Description
`protected Action`
`createAudioAction(Object key)`
Creates and returns an `Action` used to play a sound.
`protected ActionMap`
`getAudioActionMap()`
Returns an `ActionMap` containing the audio actions for this look and feel.
`protected void`
`initClassDefaults(UIDefaults table)`
Populates `table` with mappings from `uiClassID` to the fully qualified name of the ui class.
`protected void`
`initComponentDefaults(UIDefaults table)`
Populates `table` with the defaults for the basic look and feel.
`protected void`
`initSystemColorDefaults(UIDefaults table)`
Populates `table` with system colors.
`protected void`
`loadSystemColors(UIDefaults table, String[] systemColors, boolean useNative)`
Populates `table` with the `name-color` pairs in `systemColors`.
`protected void`
`playSound(Action audioAction)`
If necessary, invokes `actionPerformed` on `audioAction` to play a sound.

### Methods declared in class LookAndFeel

`getDesktopPropertyValue, getDisabledIcon, getDisabledSelectedIcon, getLayoutStyle, getSupportsWindowDecorations, installBorder, installColors, installColorsAndFont, installProperty, loadKeyBindings, makeComponentInputMap, makeIcon, makeInputMap, makeKeyBindings, provideErrorFeedback, toString, uninstallBorder`
Modifier and Type
Method
Description
`static Object`
`getDesktopPropertyValue(String systemPropertyName, Object fallbackValue)`
Returns the value of the specified system desktop property by invoking `Toolkit.getDefaultToolkit().getDesktopProperty()`.
`Icon`
`getDisabledIcon(JComponent component, Icon icon)`
Returns an `Icon` with a disabled appearance.
`Icon`
`getDisabledSelectedIcon(JComponent component, Icon icon)`
Returns an `Icon` for use by disabled components that are also selected.
`LayoutStyle`
`getLayoutStyle()`
Returns the `LayoutStyle` for this look and feel.
`boolean`
`getSupportsWindowDecorations()`
Returns `true` if the `LookAndFeel` returned `RootPaneUI` instances support providing `Window` decorations in a `JRootPane`.
`static void`
`installBorder(JComponent c, String defaultBorderName)`
Convenience method for setting a component's border property with a value from the defaults.
`static void`
`installColors(JComponent c, String defaultBgName, String defaultFgName)`
Convenience method for setting a component's foreground and background color properties with values from the defaults.
`static void`
`installColorsAndFont(JComponent c, String defaultBgName, String defaultFgName, String defaultFontName)`
Convenience method for setting a component's foreground, background and font properties with values from the defaults.
`static void`
`installProperty(JComponent c, String propertyName, Object propertyValue)`
Convenience method for installing a property with the specified name and value on a component if that property has not already been set by the developer.
`static void`
`loadKeyBindings(InputMap retMap, Object[] keys)`
Populates an `InputMap` with the specified bindings.
`static ComponentInputMap`
`makeComponentInputMap(JComponent c, Object[] keys)`
Creates a `ComponentInputMapUIResource` from `keys`.
`static Object`
`makeIcon(Class<?> baseClass, String gifFile)`
Creates and returns a `UIDefault.LazyValue` that loads an image.
`static InputMap`
`makeInputMap(Object[] keys)`
Creates an `InputMapUIResource` from `keys`.
`static JTextComponent.KeyBinding[]`
`makeKeyBindings(Object[] keyBindingList)`
Convenience method for building an array of `KeyBindings`.
`void`
`provideErrorFeedback(Component component)`
Invoked when the user attempts an invalid operation, such as pasting into an uneditable `JTextField` that has focus.
`String`
`toString()`
Returns a string that displays and identifies this object's properties.
`static void`
`uninstallBorder(JComponent c)`
Convenience method for uninstalling a border.

### Methods declared in class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`
Modifier and Type
Method
Description
`protected Object`
`clone()`
Creates and returns a copy of this object.
`boolean`
`equals(Object obj)`
Indicates whether some other object is "equal to" this one.
`protected void`
`finalize()`
Deprecated, for removal: This API element is subject to removal in a future version.
Finalization is deprecated and subject to removal in a future release.
`final Class<?>`
`getClass()`
Returns the runtime class of this `Object`.
`int`
`hashCode()`
Returns a hash code value for this object.
`final void`
`notify()`
Wakes up a single thread that is waiting on this object's monitor.
`final void`
`notifyAll()`
Wakes up all threads that are waiting on this object's monitor.
`final void`
`wait()`
Causes the current thread to wait until it is awakened, typically by being notified or interrupted.
`final void`
`wait(long timeoutMillis)`
Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
`final void`
`wait(long timeoutMillis, int nanos)`
Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

## Constructor Details

### SynthLookAndFeel

public SynthLookAndFeel()
Creates a SynthLookAndFeel.

For the returned `SynthLookAndFeel` to be useful you need to invoke `load` to specify the set of `SynthStyle`s, or invoke `setStyleFactory`.

See Also:
  - `load(InputStream, Class)`
  - `setStyleFactory(SynthStyleFactory)`

## Method Details

### setStyleFactory

public static void setStyleFactory(SynthStyleFactory cache)
Sets the SynthStyleFactory that the UI classes provided by synth will use to obtain a SynthStyle.

Parameters:
  `cache` - SynthStyleFactory the UIs should use.

### getStyleFactory

public static SynthStyleFactory getStyleFactory()
Returns the current SynthStyleFactory.

Returns:
  SynthStyleFactory

### getStyle

public static SynthStyle getStyle(JComponent c, Region region)
Gets a SynthStyle for the specified region of the specified component. This is not for general consumption, only custom UIs should call this method.

Parameters:
  `c` - JComponent to get the SynthStyle for
  `region` - Identifies the region of the specified component
Returns:
  SynthStyle to use.

### updateStyles

public static void updateStyles(Component c)
Updates the style associated with `c`, and all its children. This is a lighter version of `SwingUtilities.updateComponentTreeUI`.

Parameters:
  `c` - Component to update style for.

### getRegion

public static Region getRegion(JComponent c)
Returns the Region for the JComponent `c`.

Parameters:
  `c` - JComponent to fetch the Region for
Returns:
  Region corresponding to `c`

### createUI

public static ComponentUI createUI(JComponent c)
Creates the Synth look and feel `ComponentUI` for the passed in `JComponent`.

Parameters:
  `c` - JComponent to create the `ComponentUI` for
Returns:
  ComponentUI to use for `c`

### load

public void load(InputStream input, Class<?> resourceBase) throws ParseException
Loads the set of `SynthStyle`s that will be used by this `SynthLookAndFeel`. `resourceBase` is used to resolve any path based resources, for example an `Image` would be resolved by `resourceBase.getResource(path)`. Refer to Synth File Format for more information.

Parameters:
  `input` - InputStream to load from
  `resourceBase` - used to resolve any images or other resources
Throws:
  `ParseException` - if there is an error in parsing
  `IllegalArgumentException` - if input or resourceBase is `null`

### initialize

public void initialize()
Called by UIManager when this look and feel is installed.

Overrides:
  `initialize` in class `LookAndFeel`
See Also:
  - `LookAndFeel.uninitialize()`
  - `UIManager.setLookAndFeel(LookAndFeel)`

### uninitialize

public void uninitialize()
Called by UIManager when this look and feel is uninstalled.

Overrides:
  `uninitialize` in class `LookAndFeel`
See Also:
  - `LookAndFeel.initialize()`
  - `UIManager.setLookAndFeel(LookAndFeel)`

### getDefaults

public UIDefaults getDefaults()
Returns the defaults for this SynthLookAndFeel.

Overrides:
  `getDefaults` in class `BasicLookAndFeel`
Returns:
  Defaults table.
See Also:
  - `BasicLookAndFeel.initClassDefaults(UIDefaults)`
  - `BasicLookAndFeel.initSystemColorDefaults(UIDefaults)`
  - `BasicLookAndFeel.initComponentDefaults(UIDefaults)`

### isSupportedLookAndFeel

public boolean isSupportedLookAndFeel()
Returns true, SynthLookAndFeel is always supported.

Specified by:
  `isSupportedLookAndFeel` in class `LookAndFeel`
Returns:
  true.
See Also:
  - `UIManager.setLookAndFeel(LookAndFeel)`

### isNativeLookAndFeel

public boolean isNativeLookAndFeel()
Returns false, SynthLookAndFeel is not a native look and feel.

Specified by:
  `isNativeLookAndFeel` in class `LookAndFeel`
Returns:
  false

### getDescription

public String getDescription()
Returns a textual description of SynthLookAndFeel.

Specified by:
  `getDescription` in class `LookAndFeel`
Returns:
  textual description of synth.

### getName

public String getName()
Return a short string that identifies this look and feel.

Specified by:
  `getName` in class `LookAndFeel`
Returns:
  a short string identifying this look and feel.

### getID

public String getID()
Return a string that identifies this look and feel.

Specified by:
  `getID` in class `LookAndFeel`
Returns:
  a short string identifying this look and feel.

### shouldUpdateStyleOnAncestorChanged

public boolean shouldUpdateStyleOnAncestorChanged()
Returns whether or not the UIs should update their `SynthStyles` from the `SynthStyleFactory` when the ancestor of the `JComponent` changes. A subclass that provided a `SynthStyleFactory` that based the return value from `getStyle` off the containment hierarchy would override this method to return true.

Returns:
  whether or not the UIs should update their `SynthStyles` from the `SynthStyleFactory` when the ancestor changed.

### shouldUpdateStyleOnEvent

protected boolean shouldUpdateStyleOnEvent(PropertyChangeEvent ev)
Returns whether or not the UIs should update their styles when a particular event occurs.

Parameters:
  `ev` - a `PropertyChangeEvent`
Returns:
  whether or not the UIs should update their styles
Since:
  1.7