SynthLookAndFeel (Java SE 17 & JDK 17)
Description: declaration: module: java.desktop, package: javax.swing.plaf.synth, class: SynthLookAndFeel
Keywords: javax.swing.plaf.synth.SynthLookAndFeel class

Module java.desktop
Package javax.swing.plaf.synth

# 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(java.io.InputStream, java.lang.Class<?>)` method, or provide your own `SynthStyleFactory` to `setStyleFactory(javax.swing.plaf.synth.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`.
  `void`
  `load(URL url)`
  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 javax.swing.plaf.basic.BasicLookAndFeel

  `createAudioAction, getAudioActionMap, initClassDefaults, initComponentDefaults, initSystemColorDefaults, loadSystemColors, playSound`

  ### Methods declared in class javax.swing.LookAndFeel

  `getDesktopPropertyValue, getDisabledIcon, getDisabledSelectedIcon, getLayoutStyle, getSupportsWindowDecorations, installBorder, installColors, installColorsAndFont, installProperty, loadKeyBindings, makeComponentInputMap, makeIcon, makeInputMap, makeKeyBindings, provideErrorFeedback, toString, uninstallBorder`

  ### Methods declared in class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- ## 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(java.io.InputStream, java.lang.Class<?>)`
      - `setStyleFactory(javax.swing.plaf.synth.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`

  - ### load

    public void load(URL url) throws ParseException, IOException
    Loads the set of `SynthStyle`s that will be used by this `SynthLookAndFeel`. Path based resources are resolved relatively to the specified `URL` of the style. For example an `Image` would be resolved by `new URL(synthFile, path)`. Refer to Synth File Format for more information.

    Whilst this API may be safe for loading local resources that are delivered with a `LookAndFeel` or application, and so have an equal level of trust with application code, using it to load from remote resources, particularly any which may have a lower level of trust, is strongly discouraged. The alternative mechanisms to load styles from an `InputStream` load(InputStream, Class) using resources co-located with the application or by providing a `SynthStyleFactory` to setStyleFactory(SynthStyleFactory) are preferred.

    Parameters:
      `url` - the `URL` to load the set of `SynthStyle` from
    Throws:
      `ParseException` - if there is an error in parsing
      `IllegalArgumentException` - if synthSet is `null`
      `IOException` - if synthSet cannot be opened as an `InputStream`
    Since:
      1.6

  - ### 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(javax.swing.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(javax.swing.LookAndFeel)`

  - ### getDefaults

    public UIDefaults getDefaults()
    Returns the defaults for this SynthLookAndFeel.
    Overrides:
      `getDefaults` in class `BasicLookAndFeel`
    Returns:
      Defaults table.
    See Also:
      - `BasicLookAndFeel.initClassDefaults(javax.swing.UIDefaults)`
      - `BasicLookAndFeel.initSystemColorDefaults(javax.swing.UIDefaults)`
      - `BasicLookAndFeel.initComponentDefaults(javax.swing.UIDefaults)`

  - ### isSupportedLookAndFeel

    public boolean isSupportedLookAndFeel()
    Returns true, SynthLookAndFeel is always supported.
    Specified by:
      `isSupportedLookAndFeel` in class `LookAndFeel`
    Returns:
      true.
    See Also:
      - `UIManager.setLookAndFeel(javax.swing.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