/*
 * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Oracle designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Oracle in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

Provides user interface objects built according to the cross-platform Nimbus look and feel.

Nimbus uses instances of the Painter interface to paint components. With each Swing component it associates a foreground and a background Painter, and there may be several painters for different component states.

Nimbus allows customizing many of its properties, including painters, by altering the UIDefaults table. Here's an example:

UIManager.put("ProgressBar.tileWidth", myTileWidth);
UIManager.put("ProgressBar[Enabled].backgroundPainter", myBgPainter);
UIManager.put("ProgressBar[Enabled].foregroundPainter", myFgPainter);

Per-component customization is also possible. When rendering a component, Nimbus checks its client property named "Nimbus.Overrides". The value of this property should be an instance of UIDefaults. Settings from that table override the UIManager settings, but for that particular component instance only. An optional client property, "Nimbus.Overrides.InheritDefaults" of type Boolean, specifies whether the overriding settings should be merged with default ones (true), or replace them (false). By default they are merged:

JProgressBar bar = new JProgressBar();
UIDefaults overrides = new UIDefaults();
overrides.put("ProgressBar.cycleTime", 330);
...
bar.putClientProperty("Nimbus.Overrides", overrides);
bar.putClientProperty("Nimbus.Overrides.InheritDefaults", false);

Colors in Nimbus are derived from a core set of primary colors. There are also secondary colors, which are derived from primary ones, but serve themselves as base colors for other derived colors. The derivation mechanism allows for runtime customization, i.e. if a primary or secondary color is changed, all colors that are derived from it are automatically updated. The method NimbusLookAndFeel.getDerivedColor(String, float, float, float, int, boolean) may be used to create a derived color.

These classes are designed to be used while the corresponding LookAndFeel class has been installed (UIManager.setLookAndFeel(new XXXLookAndFeel())). Using them while a different LookAndFeel is installed may produce unexpected results, including exceptions. Additionally, changing the LookAndFeel maintained by the UIManager without updating the corresponding ComponentUI of any JComponents may also produce unexpected results, such as the wrong colors showing up, and is generally not encouraged.

Note: Most of the Swing API is not thread safe. For details, see Concurrency in Swing, a section in The Java Tutorial.

Since:1.7
@serialexclude
/** * Provides user interface objects built according to the cross-platform Nimbus * look and feel. * <p> * Nimbus uses instances of the {@link javax.swing.Painter} interface to paint * components. With each Swing component it associates a foreground and a * background {@code Painter}, and there may be several painters for different * component states. * <p> * Nimbus allows customizing many of its properties, including painters, by * altering the {@link javax.swing.UIDefaults} table. Here's an example: * <pre> * UIManager.put("ProgressBar.tileWidth", myTileWidth); * UIManager.put("ProgressBar[Enabled].backgroundPainter", myBgPainter); * UIManager.put("ProgressBar[Enabled].foregroundPainter", myFgPainter); * </pre> * <p> * Per-component customization is also possible. When rendering a component, * Nimbus checks its client property named "Nimbus.Overrides". The value of this * property should be an instance of {@code UIDefaults}. Settings from that * table override the UIManager settings, but for that particular component * instance only. An optional client property, * "Nimbus.Overrides.InheritDefaults" of type Boolean, specifies whether the * overriding settings should be merged with default ones ({@code true}), or * replace them ({@code false}). By default they are merged: * <pre> * JProgressBar bar = new JProgressBar(); * UIDefaults overrides = new UIDefaults(); * overrides.put("ProgressBar.cycleTime", 330); * ... * bar.putClientProperty("Nimbus.Overrides", overrides); * bar.putClientProperty("Nimbus.Overrides.InheritDefaults", false); * </pre> * <p> * Colors in Nimbus are derived from a core set of * <a href="doc-files/properties.html#primaryColors">primary colors</a>. There * are also * <a href="doc-files/properties.html#secondaryColors">secondary colors</a>, * which are derived from primary ones, but serve themselves as base colors for * other derived colors. The derivation mechanism allows for runtime * customization, i.e. if a primary or secondary color is changed, all colors * that are derived from it are automatically updated. The method * {@link javax.swing.plaf.nimbus.NimbusLookAndFeel#getDerivedColor(java.lang.String, float, float, float, int, boolean)} * may be used to create a derived color. * <p> * These classes are designed to be used while the corresponding * {@code LookAndFeel} class has been installed * (<code>UIManager.setLookAndFeel(new <i>XXX</i>LookAndFeel())</code>). * Using them while a different {@code LookAndFeel} is installed may produce * unexpected results, including exceptions. Additionally, changing the * {@code LookAndFeel} maintained by the {@code UIManager} without updating the * corresponding {@code ComponentUI} of any {@code JComponent}s may also produce * unexpected results, such as the wrong colors showing up, and is generally not * encouraged. * <p> * <strong>Note:</strong> * Most of the Swing API is <em>not</em> thread safe. For details, see * <a * href="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html" * target="_top">Concurrency in Swing</a>, * a section in * <em><a href="http://docs.oracle.com/javase/tutorial/" * target="_top">The Java Tutorial</a></em>. * * @since 1.7 * @serial exclude */
package javax.swing.plaf.nimbus;