blob: 21f93aa34c232c219c15baa8f5eb8e1b699e12be [file] [log] [blame]
/*
* 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.
* <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;