JColorChooser class to enable users to choose from a palette of colors.
A color chooser is a component that you can place
anywhere within your program GUI.
The JColorChooser API also makes it easy
to bring up a dialog
(modal or not) that contains a color chooser.
Here is a picture of an application that uses a color chooser to set the text color in a banner:

 
The implementation of JColorChooser was enhanced in JDK 7. If you
run the example using JDK 6 or earlier, you will see a simpler color chooser
component.
ColorChooserDemo.java.
The color chooser consists of everything within the box labeled Choose Text Color. This is what a standard color chooser looks like in the Java Look & Feel. It contains two parts, a tabbed pane and a preview panel. The three tabs in the tabbed pane select chooser panels. The preview panel below the tabbed pane displays the currently selected color.
Here is the code from the example that creates
a JColorChooser instance
and adds it to a container:
public class ColorChooserDemo extends JPanel ... {
    public ColorChooserDemo() {
        super(new BorderLayout());
        banner = new JLabel("Welcome to the Tutorial Zone!",
                            JLabel.CENTER);
        banner.setForeground(Color.yellow);
        . . .
        tcc = new JColorChooser(banner.getForeground());
        . . .
        add(tcc, BorderLayout.PAGE_END);
    }
JColorChooser constructor in the previous code snippet
takes a Color argument,
which specifies the chooser's initially selected color.
If you do not specify the initial color,
then the color chooser displays
Color.white.
See the 
Color API documentation for a list of color constants you can use.
A color chooser uses an instance of
ColorSelectionModel to contain and manage the current selection.
The color selection model fires a change event
whenever the user changes the color in the color chooser.
The example program registers a change listener with the
color selection model so that it can update the
banner at the top of the window.
The following code registers and implements the change listener:
tcc.getSelectionModel().addChangeListener(this);
. . .
public void stateChanged(ChangeEvent e) {
    Color newColor = tcc.getColor();
    banner.setForeground(newColor);
}
A basic color chooser,
like the one used in the example program,
is sufficient for many programs.
However,
the color chooser API allows you to customize a color chooser
by providing it with a preview panel of your own design,
by adding your own chooser panels to it, or
by removing existing chooser panels from the color chooser.
Additionally, the JColorChooser class provides two
methods that make it easy to use a color chooser within a dialog.
The rest of this section discusses these topics:
JColorChooser API.
 

This program customizes the banner text color chooser in these ways:
This program also adds a button that brings up
a color chooser in a dialog,
which you can use to set the banner background color.
Showing a Color Chooser in a Dialog
The JColorChooser class provides 
two class methods to make it easy to use a color chooser in a
dialog.
ColorChooserDemo2 uses one of these methods,
showDialog,
to display the background color chooser when the user
clicks the Show Color Chooser... button.
Here is the single line of code from the example
that brings up the background color chooser in a dialog:
Color newColor = JColorChooser.showDialog(
                     ColorChooserDemo2.this,
                     "Choose Background Color",
                     banner.getBackground());
The dialog disappears under three conditions:
the user chooses a color and clicks the OK button,
the user cancels the operation with the Cancel button,
or the user dismisses the dialog with a frame control.
If the user chooses a color,
the showDialog method returns the new color.
If the user cancels the operation or dismisses the window,
the method returns null.
Here is the code from the example that updates
the banner background color
according to the value returned by showDialog:
if (newColor != null) {
    banner.setBackground(newColor);
}
showDialog is modal.
If you want a non-modal dialog,
you can use JColorChooser's
createDialog method to create the dialog.
This method also lets you specify action listeners for the
OK and Cancel
buttons in the dialog window.
Use JDialog's show method
to display the dialog created by this method.
For an example that uses this method, see
Specifying Other Editors
in the
How to Use Tables section.
tcc.setPreviewPanel(new JPanel());
JPanel has no size and no default view.
To set the preview panel back to the default,
use null as the argument to setPreviewPanel.
To provide a custom preview panel,
you also use setPreviewPanel.
The component you pass into the method should
inherit from JComponent,
specify a reasonable size,
and provide a customized view of the current color.
To get notified when the user changes the color
in the color chooser,
the preview panel must register
as a change listener on the color chooser's color selection model
as described previously.
Creating a Custom Chooser Panel
The default color chooser provides five chooser panels:
addChooserPanel,
or you can limit it by removing chooser panels
with removeChooserPanel.
If you want to remove all of the default chooser panels
and add one or more of your own, you can do this with a single
call to setChooserPanels.
ColorChooserDemo2
uses this method to replace the default chooser panels
with an instance of
CrayonPanel,
a custom chooser panel.
Here is the call to setChooserPanels from
that example:
//Override the chooser panels with our own.
AbstractColorChooserPanel panels[] = { new CrayonPanel() };
tcc.setChooserPanels(panels);
CrayonPanel.
Next the code calls setChooserPanels to 
set the contents of the array as the color chooser's
chooser panels.
CrayonPanel is a subclass of
AbstractColorChooserPanel and overrides the five abstract methods defined in its superclass:
void buildChooser()
void updateChooser()
public void updateChooser() {
    Color color = getColorFromModel();
    if (Color.red.equals(color)) {
        redCrayon.setSelected(true);
    } else if (Color.yellow.equals(color)) {
        yellowCrayon.setSelected(true);
    } else if (Color.green.equals(color)) {
        greenCrayon.setSelected(true);
    } else if (Color.blue.equals(color)) {
        blueCrayon.setSelected(true);
    }
} 
String getDisplayName()
getDisplayName method:
     
public String getDisplayName() {
    return "Crayons";
}
     Icon getSmallDisplayIcon()
null.
Icon getLargeDisplayIcon()
null.
JColorChooser constructors and methods.
Other methods you might call
are listed in the API tables in
The JComponent Class.
The API for using color choosers falls into these categories:
| Method or Constructor | Purpose | 
|---|---|
| JColorChooser() JColorChooser(Color) JColorChooser(ColorSelectionModel) | Create a color chooser.
    The default constructor creates a color chooser
    with an initial color of Color.white.
    Use the second constructor
    to specify a different initial color.
    TheColorSelectionModelargument, when present,
    provides the color chooser with a color selection model. | 
| Color showDialog(Component, String, Color) | Create and show a color chooser in a modal dialog.
    The Componentargument is the parent of the dialog,
    theStringargument specifies the dialog title,
    and theColorargument specifies the chooser's initial color. | 
| JDialog createDialog(Component, String, boolean, JColorChooser, ActionListener, ActionListener) | Create a dialog for the specified color chooser.
    As with showDialog,
    theComponentargument is the parent of the dialog and
    theStringargument specifies the dialog title.
    The other arguments are as follows:
    thebooleanspecifies whether the dialog is modal,
    theJColorChooseris the color chooser to display
    in the dialog,
    the firstActionListeneris for the OK
    button, and the second is for the Cancel button. | 
| Method | Purpose | 
|---|---|
| void setPreviewPanel(JComponent) JComponent getPreviewPanel() | Set or get the component used to preview the color selection.
    To remove the preview panel, use new JPanel()as
    an argument.
    To specify the default preview panel, usenull. | 
| void setChooserPanels(AbstractColorChooserPanel[]) AbstractColorChooserPanel[] getChooserPanels() | Set or get the chooser panels in the color chooser. | 
| void addChooserPanel(AbstractColorChooserPanel) AbstractColorChooserPanel removeChooserPanel(AbstractColorChooserPanel) | Add a chooser panel to the color chooser or remove a chooser panel from it. | 
| void setDragEnabled(boolean) boolean getDragEnabled() | Set or get the dragEnabledproperty, which must be true
        to enable drag handling on this component.  The default value is false.
        See
Drag and Drop and Data Transfer        for more details. | 
| Method | Purpose | 
|---|---|
| void setColor(Color) void setColor(int, int, int) void setColor(int) Color getColor() | Set or get the currently selected color.
    The three integer version of the setColormethod
    interprets the three integers together as an RGB color.
    The single integer version of thesetColormethod
    divides the integer into four 8-bit bytes and interprets the integer 
    as an RGB color as follows:  | 
| void setSelectionModel(ColorSelectionModel) ColorSelectionModel getSelectionModel() | Set or get the selection model for the color chooser. This object contains the current selection and fires change events to registered listeners whenever the selection changes. | 
JColorChooser
and where those examples are described.
| Example | Where Described | Notes | 
|---|---|---|
| ColorChooserDemo | This section | Uses a standard color chooser. | 
| ColorChooserDemo2 | This section | Uses one customized color chooser
     and one standard color chooser in a dialog
     created with showDialog. | 
| TableDialogEditDemo | How to Use Tables | Shows how to use a color chooser
     as a custom cell editor in a table.
     The color chooser used by this example is created
     with createDialog. | 
| BasicDnD | Introduction to DnD | Uses a color chooser that is not in a dialog; demonstrates default drag-and-drop capabilities of Swing components, including color choosers. |