/*
 * Copyright (c) 1996, 2014, 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.
 */
package java.awt;

import sun.awt.AWTAccessor;

import java.io.ObjectStreamException;

import java.lang.annotation.Native;

A class to encapsulate symbolic colors representing the color of native GUI objects on a system. For systems which support the dynamic update of the system colors (when the user changes the colors) the actual RGB values of these symbolic colors will also change dynamically. In order to compare the "current" RGB value of a SystemColor object with a non-symbolic Color object, getRGB should be used rather than equals.

Note that the way in which these system colors are applied to GUI objects may vary slightly from platform to platform since GUI objects may be rendered differently on each platform.

System color values may also be available through the getDesktopProperty method on java.awt.Toolkit.

Author: Carl Quinn, Amy Fowler
See Also:
  • getDesktopProperty.getDesktopProperty
/** * A class to encapsulate symbolic colors representing the color of * native GUI objects on a system. For systems which support the dynamic * update of the system colors (when the user changes the colors) * the actual RGB values of these symbolic colors will also change * dynamically. In order to compare the "current" RGB value of a * <code>SystemColor</code> object with a non-symbolic Color object, * <code>getRGB</code> should be used rather than <code>equals</code>. * <p> * Note that the way in which these system colors are applied to GUI objects * may vary slightly from platform to platform since GUI objects may be * rendered differently on each platform. * <p> * System color values may also be available through the <code>getDesktopProperty</code> * method on <code>java.awt.Toolkit</code>. * * @see Toolkit#getDesktopProperty * * @author Carl Quinn * @author Amy Fowler */
public final class SystemColor extends Color implements java.io.Serializable {
The array index for the desktop system color.
See Also:
/** * The array index for the * {@link #desktop} system color. * @see SystemColor#desktop */
@Native public final static int DESKTOP = 0;
The array index for the activeCaption system color.
See Also:
/** * The array index for the * {@link #activeCaption} system color. * @see SystemColor#activeCaption */
@Native public final static int ACTIVE_CAPTION = 1;
The array index for the activeCaptionText system color.
See Also:
/** * The array index for the * {@link #activeCaptionText} system color. * @see SystemColor#activeCaptionText */
@Native public final static int ACTIVE_CAPTION_TEXT = 2;
The array index for the activeCaptionBorder system color.
See Also:
/** * The array index for the * {@link #activeCaptionBorder} system color. * @see SystemColor#activeCaptionBorder */
@Native public final static int ACTIVE_CAPTION_BORDER = 3;
The array index for the inactiveCaption system color.
See Also:
/** * The array index for the * {@link #inactiveCaption} system color. * @see SystemColor#inactiveCaption */
@Native public final static int INACTIVE_CAPTION = 4;
The array index for the inactiveCaptionText system color.
See Also:
/** * The array index for the * {@link #inactiveCaptionText} system color. * @see SystemColor#inactiveCaptionText */
@Native public final static int INACTIVE_CAPTION_TEXT = 5;
The array index for the inactiveCaptionBorder system color.
See Also:
/** * The array index for the * {@link #inactiveCaptionBorder} system color. * @see SystemColor#inactiveCaptionBorder */
@Native public final static int INACTIVE_CAPTION_BORDER = 6;
The array index for the window system color.
See Also:
/** * The array index for the * {@link #window} system color. * @see SystemColor#window */
@Native public final static int WINDOW = 7;
The array index for the windowBorder system color.
See Also:
/** * The array index for the * {@link #windowBorder} system color. * @see SystemColor#windowBorder */
@Native public final static int WINDOW_BORDER = 8;
The array index for the windowText system color.
See Also:
/** * The array index for the * {@link #windowText} system color. * @see SystemColor#windowText */
@Native public final static int WINDOW_TEXT = 9;
The array index for the menu system color.
See Also:
/** * The array index for the * {@link #menu} system color. * @see SystemColor#menu */
@Native public final static int MENU = 10;
The array index for the menuText system color.
See Also:
/** * The array index for the * {@link #menuText} system color. * @see SystemColor#menuText */
@Native public final static int MENU_TEXT = 11;
The array index for the text system color.
See Also:
/** * The array index for the * {@link #text} system color. * @see SystemColor#text */
@Native public final static int TEXT = 12;
The array index for the textText system color.
See Also:
/** * The array index for the * {@link #textText} system color. * @see SystemColor#textText */
@Native public final static int TEXT_TEXT = 13;
The array index for the textHighlight system color.
See Also:
/** * The array index for the * {@link #textHighlight} system color. * @see SystemColor#textHighlight */
@Native public final static int TEXT_HIGHLIGHT = 14;
The array index for the textHighlightText system color.
See Also:
/** * The array index for the * {@link #textHighlightText} system color. * @see SystemColor#textHighlightText */
@Native public final static int TEXT_HIGHLIGHT_TEXT = 15;
The array index for the textInactiveText system color.
See Also:
/** * The array index for the * {@link #textInactiveText} system color. * @see SystemColor#textInactiveText */
@Native public final static int TEXT_INACTIVE_TEXT = 16;
The array index for the control system color.
See Also:
/** * The array index for the * {@link #control} system color. * @see SystemColor#control */
@Native public final static int CONTROL = 17;
The array index for the controlText system color.
See Also:
/** * The array index for the * {@link #controlText} system color. * @see SystemColor#controlText */
@Native public final static int CONTROL_TEXT = 18;
The array index for the controlHighlight system color.
See Also:
/** * The array index for the * {@link #controlHighlight} system color. * @see SystemColor#controlHighlight */
@Native public final static int CONTROL_HIGHLIGHT = 19;
The array index for the controlLtHighlight system color.
See Also:
/** * The array index for the * {@link #controlLtHighlight} system color. * @see SystemColor#controlLtHighlight */
@Native public final static int CONTROL_LT_HIGHLIGHT = 20;
The array index for the controlShadow system color.
See Also:
/** * The array index for the * {@link #controlShadow} system color. * @see SystemColor#controlShadow */
@Native public final static int CONTROL_SHADOW = 21;
The array index for the controlDkShadow system color.
See Also:
/** * The array index for the * {@link #controlDkShadow} system color. * @see SystemColor#controlDkShadow */
@Native public final static int CONTROL_DK_SHADOW = 22;
The array index for the scrollbar system color.
See Also:
/** * The array index for the * {@link #scrollbar} system color. * @see SystemColor#scrollbar */
@Native public final static int SCROLLBAR = 23;
The array index for the info system color.
See Also:
/** * The array index for the * {@link #info} system color. * @see SystemColor#info */
@Native public final static int INFO = 24;
The array index for the infoText system color.
See Also:
/** * The array index for the * {@link #infoText} system color. * @see SystemColor#infoText */
@Native public final static int INFO_TEXT = 25;
The number of system colors in the array.
/** * The number of system colors in the array. */
@Native public final static int NUM_COLORS = 26; /******************************************************************************************/ /* * System colors with default initial values, overwritten by toolkit if * system values differ and are available. * Should put array initialization above first field that is using * SystemColor constructor to initialize. */ private static int[] systemColors = { 0xFF005C5C, // desktop = new Color(0,92,92); 0xFF000080, // activeCaption = new Color(0,0,128); 0xFFFFFFFF, // activeCaptionText = Color.white; 0xFFC0C0C0, // activeCaptionBorder = Color.lightGray; 0xFF808080, // inactiveCaption = Color.gray; 0xFFC0C0C0, // inactiveCaptionText = Color.lightGray; 0xFFC0C0C0, // inactiveCaptionBorder = Color.lightGray; 0xFFFFFFFF, // window = Color.white; 0xFF000000, // windowBorder = Color.black; 0xFF000000, // windowText = Color.black; 0xFFC0C0C0, // menu = Color.lightGray; 0xFF000000, // menuText = Color.black; 0xFFC0C0C0, // text = Color.lightGray; 0xFF000000, // textText = Color.black; 0xFF000080, // textHighlight = new Color(0,0,128); 0xFFFFFFFF, // textHighlightText = Color.white; 0xFF808080, // textInactiveText = Color.gray; 0xFFC0C0C0, // control = Color.lightGray; 0xFF000000, // controlText = Color.black; 0xFFFFFFFF, // controlHighlight = Color.white; 0xFFE0E0E0, // controlLtHighlight = new Color(224,224,224); 0xFF808080, // controlShadow = Color.gray; 0xFF000000, // controlDkShadow = Color.black; 0xFFE0E0E0, // scrollbar = new Color(224,224,224); 0xFFE0E000, // info = new Color(224,224,0); 0xFF000000, // infoText = Color.black; };
The color rendered for the background of the desktop.
/** * The color rendered for the background of the desktop. */
public final static SystemColor desktop = new SystemColor((byte)DESKTOP);
The color rendered for the window-title background of the currently active window.
/** * The color rendered for the window-title background of the currently active window. */
public final static SystemColor activeCaption = new SystemColor((byte)ACTIVE_CAPTION);
The color rendered for the window-title text of the currently active window.
/** * The color rendered for the window-title text of the currently active window. */
public final static SystemColor activeCaptionText = new SystemColor((byte)ACTIVE_CAPTION_TEXT);
The color rendered for the border around the currently active window.
/** * The color rendered for the border around the currently active window. */
public final static SystemColor activeCaptionBorder = new SystemColor((byte)ACTIVE_CAPTION_BORDER);
The color rendered for the window-title background of inactive windows.
/** * The color rendered for the window-title background of inactive windows. */
public final static SystemColor inactiveCaption = new SystemColor((byte)INACTIVE_CAPTION);
The color rendered for the window-title text of inactive windows.
/** * The color rendered for the window-title text of inactive windows. */
public final static SystemColor inactiveCaptionText = new SystemColor((byte)INACTIVE_CAPTION_TEXT);
The color rendered for the border around inactive windows.
/** * The color rendered for the border around inactive windows. */
public final static SystemColor inactiveCaptionBorder = new SystemColor((byte)INACTIVE_CAPTION_BORDER);
The color rendered for the background of interior regions inside windows.
/** * The color rendered for the background of interior regions inside windows. */
public final static SystemColor window = new SystemColor((byte)WINDOW);
The color rendered for the border around interior regions inside windows.
/** * The color rendered for the border around interior regions inside windows. */
public final static SystemColor windowBorder = new SystemColor((byte)WINDOW_BORDER);
The color rendered for text of interior regions inside windows.
/** * The color rendered for text of interior regions inside windows. */
public final static SystemColor windowText = new SystemColor((byte)WINDOW_TEXT);
The color rendered for the background of menus.
/** * The color rendered for the background of menus. */
public final static SystemColor menu = new SystemColor((byte)MENU);
The color rendered for the text of menus.
/** * The color rendered for the text of menus. */
public final static SystemColor menuText = new SystemColor((byte)MENU_TEXT);
The color rendered for the background of text control objects, such as textfields and comboboxes.
/** * The color rendered for the background of text control objects, such as * textfields and comboboxes. */
public final static SystemColor text = new SystemColor((byte)TEXT);
The color rendered for the text of text control objects, such as textfields and comboboxes.
/** * The color rendered for the text of text control objects, such as textfields * and comboboxes. */
public final static SystemColor textText = new SystemColor((byte)TEXT_TEXT);
The color rendered for the background of selected items, such as in menus, comboboxes, and text.
/** * The color rendered for the background of selected items, such as in menus, * comboboxes, and text. */
public final static SystemColor textHighlight = new SystemColor((byte)TEXT_HIGHLIGHT);
The color rendered for the text of selected items, such as in menus, comboboxes, and text.
/** * The color rendered for the text of selected items, such as in menus, comboboxes, * and text. */
public final static SystemColor textHighlightText = new SystemColor((byte)TEXT_HIGHLIGHT_TEXT);
The color rendered for the text of inactive items, such as in menus.
/** * The color rendered for the text of inactive items, such as in menus. */
public final static SystemColor textInactiveText = new SystemColor((byte)TEXT_INACTIVE_TEXT);
The color rendered for the background of control panels and control objects, such as pushbuttons.
/** * The color rendered for the background of control panels and control objects, * such as pushbuttons. */
public final static SystemColor control = new SystemColor((byte)CONTROL);
The color rendered for the text of control panels and control objects, such as pushbuttons.
/** * The color rendered for the text of control panels and control objects, * such as pushbuttons. */
public final static SystemColor controlText = new SystemColor((byte)CONTROL_TEXT);
The color rendered for light areas of 3D control objects, such as pushbuttons. This color is typically derived from the control background color to provide a 3D effect.
/** * The color rendered for light areas of 3D control objects, such as pushbuttons. * This color is typically derived from the <code>control</code> background color * to provide a 3D effect. */
public final static SystemColor controlHighlight = new SystemColor((byte)CONTROL_HIGHLIGHT);
The color rendered for highlight areas of 3D control objects, such as pushbuttons. This color is typically derived from the control background color to provide a 3D effect.
/** * The color rendered for highlight areas of 3D control objects, such as pushbuttons. * This color is typically derived from the <code>control</code> background color * to provide a 3D effect. */
public final static SystemColor controlLtHighlight = new SystemColor((byte)CONTROL_LT_HIGHLIGHT);
The color rendered for shadow areas of 3D control objects, such as pushbuttons. This color is typically derived from the control background color to provide a 3D effect.
/** * The color rendered for shadow areas of 3D control objects, such as pushbuttons. * This color is typically derived from the <code>control</code> background color * to provide a 3D effect. */
public final static SystemColor controlShadow = new SystemColor((byte)CONTROL_SHADOW);
The color rendered for dark shadow areas on 3D control objects, such as pushbuttons. This color is typically derived from the control background color to provide a 3D effect.
/** * The color rendered for dark shadow areas on 3D control objects, such as pushbuttons. * This color is typically derived from the <code>control</code> background color * to provide a 3D effect. */
public final static SystemColor controlDkShadow = new SystemColor((byte)CONTROL_DK_SHADOW);
The color rendered for the background of scrollbars.
/** * The color rendered for the background of scrollbars. */
public final static SystemColor scrollbar = new SystemColor((byte)SCROLLBAR);
The color rendered for the background of tooltips or spot help.
/** * The color rendered for the background of tooltips or spot help. */
public final static SystemColor info = new SystemColor((byte)INFO);
The color rendered for the text of tooltips or spot help.
/** * The color rendered for the text of tooltips or spot help. */
public final static SystemColor infoText = new SystemColor((byte)INFO_TEXT); /* * JDK 1.1 serialVersionUID. */ private static final long serialVersionUID = 4503142729533789064L; /* * An index into either array of SystemColor objects or values. */ private transient int index; private static SystemColor systemColorObjects [] = { SystemColor.desktop, SystemColor.activeCaption, SystemColor.activeCaptionText, SystemColor.activeCaptionBorder, SystemColor.inactiveCaption, SystemColor.inactiveCaptionText, SystemColor.inactiveCaptionBorder, SystemColor.window, SystemColor.windowBorder, SystemColor.windowText, SystemColor.menu, SystemColor.menuText, SystemColor.text, SystemColor.textText, SystemColor.textHighlight, SystemColor.textHighlightText, SystemColor.textInactiveText, SystemColor.control, SystemColor.controlText, SystemColor.controlHighlight, SystemColor.controlLtHighlight, SystemColor.controlShadow, SystemColor.controlDkShadow, SystemColor.scrollbar, SystemColor.info, SystemColor.infoText }; static { AWTAccessor.setSystemColorAccessor(SystemColor::updateSystemColors); updateSystemColors(); }
Called from <init> and toolkit to update the above systemColors cache.
/** * Called from {@code <init>} and toolkit to update the above systemColors cache. */
private static void updateSystemColors() { if (!GraphicsEnvironment.isHeadless()) { Toolkit.getDefaultToolkit().loadSystemColors(systemColors); } for (int i = 0; i < systemColors.length; i++) { systemColorObjects[i].value = systemColors[i]; } }
Creates a symbolic color that represents an indexed entry into system color cache. Used by above static system colors.
/** * Creates a symbolic color that represents an indexed entry into system * color cache. Used by above static system colors. */
private SystemColor(byte index) { super(systemColors[index]); this.index = index; }
Returns a string representation of this Color's values. This method is intended to be used only for debugging purposes, and the content and format of the returned string may vary between implementations. The returned string may be empty but may not be null.
Returns: a string representation of this Color
/** * Returns a string representation of this <code>Color</code>'s values. * This method is intended to be used only for debugging purposes, * and the content and format of the returned string may vary between * implementations. * The returned string may be empty but may not be <code>null</code>. * * @return a string representation of this <code>Color</code> */
public String toString() { return getClass().getName() + "[i=" + (index) + "]"; }
The design of the SystemColor class assumes that the SystemColor object instances stored in the static final fields above are the only instances that can be used by developers. This method helps maintain those limits on instantiation by using the index stored in the value field of the serialized form of the object to replace the serialized object with the equivalent static object constant field of SystemColor. See the writeReplace method for more information on the serialized form of these objects.
Returns:one of the SystemColor static object fields that refers to the same system color.
/** * The design of the {@code SystemColor} class assumes that * the {@code SystemColor} object instances stored in the * static final fields above are the only instances that can * be used by developers. * This method helps maintain those limits on instantiation * by using the index stored in the value field of the * serialized form of the object to replace the serialized * object with the equivalent static object constant field * of {@code SystemColor}. * See the {@link #writeReplace} method for more information * on the serialized form of these objects. * @return one of the {@code SystemColor} static object * fields that refers to the same system color. */
private Object readResolve() { // The instances of SystemColor are tightly controlled and // only the canonical instances appearing above as static // constants are allowed. The serial form of SystemColor // objects stores the color index as the value. Here we // map that index back into the canonical instance. return systemColorObjects[value]; }
Returns a specialized version of the SystemColor object for writing to the serialized stream.
@serialData The value field of a serialized SystemColor object contains the array index of the system color instead of the rgb data for the system color. This index is used by the readResolve method to resolve the deserialized objects back to the original static constant versions to ensure unique instances of each SystemColor object.
Returns:a proxy SystemColor object with its value replaced by the corresponding system color index.
/** * Returns a specialized version of the {@code SystemColor} * object for writing to the serialized stream. * @serialData * The value field of a serialized {@code SystemColor} object * contains the array index of the system color instead of the * rgb data for the system color. * This index is used by the {@link #readResolve} method to * resolve the deserialized objects back to the original * static constant versions to ensure unique instances of * each {@code SystemColor} object. * @return a proxy {@code SystemColor} object with its value * replaced by the corresponding system color index. */
private Object writeReplace() throws ObjectStreamException { // we put an array index in the SystemColor.value while serialize // to keep compatibility. SystemColor color = new SystemColor((byte)index); color.value = index; return color; } }