javax.swing.plaf.basic

## Class BasicLookAndFeel

- java.lang.Object
- - javax.swing.LookAndFeel
  - - javax.swing.plaf.basic.BasicLookAndFeel

- All Implemented Interfaces:
    Serializable
  Direct Known Subclasses:
    MetalLookAndFeel, SynthLookAndFeel

      public abstract class BasicLookAndFeel
      extends LookAndFeel
      implements Serializable

  A base class to use in creating a look and feel for Swing.

  Each of the `ComponentUI`s provided by `BasicLookAndFeel` derives its behavior from the defaults table. Unless otherwise noted each of the `ComponentUI` implementations in this package document the set of defaults they use. Unless otherwise noted the defaults are installed at the time `installUI` is invoked, and follow the recommendations outlined in `LookAndFeel` for installing defaults.

  Warning: Serialized objects of this class will not be compatible with future Swing releases. The current serialization support is appropriate for short term storage or RMI between applications running the same version of Swing. As of 1.4, support for long term storage of all JavaBeans™ has been added to the `java.beans` package. Please see `XMLEncoder`.

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `BasicLookAndFeel()` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    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.
    `UIDefaults` | `getDefaults()` | Returns the look and feel defaults.
    `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.
    `void` | `initialize()` | Initializes the 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.
    `void` | `uninitialize()` | Uninitializes the look and feel.

    - ### Methods inherited from class javax.swing.LookAndFeel

      `getDescription, getDesktopPropertyValue, getDisabledIcon, getDisabledSelectedIcon, getID, getLayoutStyle, getName, getSupportsWindowDecorations, installBorder, installColors, installColorsAndFont, installProperty, isNativeLookAndFeel, isSupportedLookAndFeel, 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`

- - ### Constructor Detail

    - #### BasicLookAndFeel

          public BasicLookAndFeel()

  - ### Method Detail

    - #### getDefaults

          public UIDefaults getDefaults()

      Returns the look and feel defaults. The returned `UIDefaults` is populated by invoking, in order, `initClassDefaults`, `initSystemColorDefaults` and `initComponentDefaults`.

      While this method is public, it should only be invoked by the `UIManager` when the look and feel is set as the current look and feel and after `initialize` has been invoked.

      Overrides:
        `getDefaults` in class `LookAndFeel`
      Returns:
        the look and feel defaults
      See Also:
        `initClassDefaults(javax.swing.UIDefaults)`, `initSystemColorDefaults(javax.swing.UIDefaults)`, `initComponentDefaults(javax.swing.UIDefaults)`

    - #### initialize

          public void initialize()

      Initializes the look and feel. While this method is public, it should only be invoked by the `UIManager` when a look and feel is installed as the current look and feel. This method is invoked before the `UIManager` invokes `getDefaults`. This method is intended to perform any initialization for the look and feel. Subclasses should do any one-time setup they need here, rather than in a static initializer, because look and feel class objects may be loaded just to discover that `isSupportedLookAndFeel()` returns `false`.
      Overrides:
        `initialize` in class `LookAndFeel`
      See Also:
        `LookAndFeel.uninitialize()`, `UIManager.setLookAndFeel(javax.swing.LookAndFeel)`

    - #### uninitialize

          public void uninitialize()

      Uninitializes the look and feel. While this method is public, it should only be invoked by the `UIManager` when the look and feel is uninstalled. For example, `UIManager.setLookAndFeel` invokes this when the look and feel is changed.

      Subclasses may choose to free up some resources here.

      Overrides:
        `uninitialize` in class `LookAndFeel`
      See Also:
        `LookAndFeel.initialize()`, `UIManager.setLookAndFeel(javax.swing.LookAndFeel)`

    - #### initClassDefaults

          protected void initClassDefaults(UIDefaults table)

      Populates `table` with mappings from `uiClassID` to the fully qualified name of the ui class. The value for a particular `uiClassID` is `"javax.swing.plaf.basic.Basic + uiClassID"`. For example, the value for the `uiClassID` `TreeUI` is `"javax.swing.plaf.basic.BasicTreeUI"`.
      Parameters:
        `table` - the `UIDefaults` instance the entries are added to
      Throws:
        `NullPointerException` - if `table` is `null`
      See Also:
        `LookAndFeel`, `getDefaults()`

    - #### initSystemColorDefaults

          protected void initSystemColorDefaults(UIDefaults table)

      Populates `table` with system colors. This creates an array of `name-color` pairs and invokes `loadSystemColors`.

      The name is a `String` that corresponds to the name of one of the static `SystemColor` fields in the `SystemColor` class. A name-color pair is created for every such `SystemColor` field.

      The `color` corresponds to a hex `String` as understood by `Color.decode`. For example, one of the `name-color` pairs is `"desktop"-"#005C5C"`. This corresponds to the `SystemColor` field `desktop`, with a color value of `new Color(0x005C5C)`.

      The following shows two of the `name-color` pairs:

             String[] nameColorPairs = new String[] {
                    "desktop", "#005C5C",
              "activeCaption", "#000080" };
             loadSystemColors(table, nameColorPairs, isNativeLookAndFeel());

      As previously stated, this invokes `loadSystemColors` with the supplied `table` and `name-color` pair array. The last argument to `loadSystemColors` indicates whether the value of the field in `SystemColor` should be used. This method passes the value of `isNativeLookAndFeel()` as the last argument to `loadSystemColors`.
      Parameters:
        `table` - the `UIDefaults` object the values are added to
      Throws:
        `NullPointerException` - if `table` is `null`
      See Also:
        `SystemColor`, `getDefaults()`, `loadSystemColors(javax.swing.UIDefaults, java.lang.String[], boolean)`

    - #### loadSystemColors

          protected void loadSystemColors(UIDefaults table,
                                          String[] systemColors,
                                          boolean useNative)

      Populates `table` with the `name-color` pairs in `systemColors`. Refer to `initSystemColorDefaults(UIDefaults)` for details on the format of `systemColors`.

      An entry is added to `table` for each of the `name-color` pairs in `systemColors`. The entry key is the `name` of the `name-color` pair.

      The value of the entry corresponds to the `color` of the `name-color` pair. The value of the entry is calculated in one of two ways. With either approach the value is always a `ColorUIResource`.

      If `useNative` is `false`, the `color` is created by using `Color.decode` to convert the `String` into a `Color`. If `decode` can not convert the `String` into a `Color` (`NumberFormatException` is thrown) then a `ColorUIResource` of black is used.

      If `useNative` is `true`, the `color` is the value of the field in `SystemColor` with the same name as the `name` of the `name-color` pair. If the field is not valid, a `ColorUIResource` of black is used.

      Parameters:
        `table` - the `UIDefaults` object the values are added to
        `systemColors` - array of `name-color` pairs as described in `initSystemColorDefaults(UIDefaults)`
        `useNative` - whether the color is obtained from `SystemColor` or `Color.decode`
      Throws:
        `NullPointerException` - if `systemColors` is `null`; or `systemColors` is not empty, and `table` is `null`; or one of the names of the `name-color` pairs is `null`; or `useNative` is `false` and one of the `colors` of the `name-color` pairs is `null`
        `ArrayIndexOutOfBoundsException` - if `useNative` is `false` and `systemColors.length` is odd
      See Also:
        `initSystemColorDefaults(javax.swing.UIDefaults)`, `SystemColor`, `Color.decode(String)`

    - #### initComponentDefaults

          protected void initComponentDefaults(UIDefaults table)

      Populates `table` with the defaults for the basic look and feel.
      Parameters:
        `table` - the `UIDefaults` to add the values to
      Throws:
        `NullPointerException` - if `table` is `null`

    - #### getAudioActionMap

          protected ActionMap getAudioActionMap()

      Returns an `ActionMap` containing the audio actions for this look and feel.

      The returned `ActionMap` contains `Actions` that embody the ability to render an auditory cue. These auditory cues map onto user and system activities that may be useful for an end user to know about (such as a dialog box appearing).

      At the appropriate time, the `ComponentUI` is responsible for obtaining an `Action` out of the `ActionMap` and passing it to `playSound`.

      This method first looks up the `ActionMap` from the defaults using the key `"AuditoryCues.actionMap"`.

      If the value is `non-null`, it is returned. If the value of the default `"AuditoryCues.actionMap"` is `null` and the value of the default `"AuditoryCues.cueList"` is `non-null`, an `ActionMapUIResource` is created and populated. Population is done by iterating over each of the elements of the `"AuditoryCues.cueList"` array, and invoking `createAudioAction()` to create an `Action` for each element. The resulting `Action` is placed in the `ActionMapUIResource`, using the array element as the key. For example, if the `"AuditoryCues.cueList"` array contains a single-element, `"audioKey"`, the `ActionMapUIResource` is created, then populated by way of `actionMap.put(cueList[0], createAudioAction(cueList[0]))`.

      If the value of the default `"AuditoryCues.actionMap"` is `null` and the value of the default `"AuditoryCues.cueList"` is `null`, an empty `ActionMapUIResource` is created.

      Returns:
        an ActionMap containing `Actions` responsible for playing auditory cues
      Throws:
        `ClassCastException` - if the value of the default `"AuditoryCues.actionMap"` is not an `ActionMap`, or the value of the default `"AuditoryCues.cueList"` is not an `Object[]`
      Since:
        1.4
      See Also:
        `createAudioAction(java.lang.Object)`, `playSound(Action)`

    - #### createAudioAction

          protected Action createAudioAction(Object key)

      Creates and returns an `Action` used to play a sound.

      If `key` is `non-null`, an `Action` is created using the value from the defaults with key `key`. The value identifies the sound resource to load when `actionPerformed` is invoked on the `Action`. The sound resource is loaded into a `byte[]` by way of `getClass().getResourceAsStream()`.

      Parameters:
        `key` - the key identifying the audio action
      Returns:
        an `Action` used to play the source, or `null` if `key` is `null`
      Since:
        1.4
      See Also:
        `playSound(Action)`

    - #### playSound

          protected void playSound(Action audioAction)

      If necessary, invokes `actionPerformed` on `audioAction` to play a sound. The `actionPerformed` method is invoked if the value of the `"AuditoryCues.playList"` default is a `non-null` `Object[]` containing a `String` entry equal to the name of the `audioAction`.
      Parameters:
        `audioAction` - an Action that knows how to render the audio associated with the system or user activity that is occurring; a value of `null`, is ignored
      Throws:
        `ClassCastException` - if `audioAction` is `non-null` and the value of the default `"AuditoryCues.playList"` is not an `Object[]`
      Since:
        1.4

Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2026, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.