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

# 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