Se puede utilizar la clase JColorChooser para proporcionar a los usuarios una paleta para elegir colores. Un selector de color es un componente que se puede situar en cualquier lugar dentro del GUI de un programa. El API de JColorChooser tambi�n hace sencillo desplegar un di�logo (modal o no) que contiene un selector de color.
Aqu� tienes una imagen de una aplicaci�n que utiliza un selector de color para seleccionar el color de fondo de un banner.

El c�digo fuente principal del programa est� en ColorChooserDemo.java. Tambi�n necesitar�s Banner.java.
El selector de color consiste en cualquier cosa que hay dentro del borde llamado Choose Background Color. Contiene dos partes, un panel con pesta�as y un panel de previsionado. Las tres pesta�as delprimero seleccionan un panel selector diferente. El preview panel mustra el color seleccionado actualmente.
Aqu� podemos ver el c�digo del ejemplo que crea un ejemplar de JColorChooser y lo a�ade a la ventana.
Banner banner = new Banner(); ... final JColorChooser colorChooser = new JColorChooser(banner.getColor()); ... getContentPane().add(colorChooser, BorderLayout.CENTER);
El constructor utilizado para crear el selector de color toma un argumento Color, que especifica el color seleccionaod inicialmente.
Un selector de color utiliza un ejemplar de ColorSelectionModel para contener y manejar la selecci�n actual. Este dispara un evento "change" si el usuario cambia el color del selector. El programa de ejemplo registra un oyente de "change" con el ColorSelectionModel para poder actualizar el banner de la parte superior de la ventana.
Aqu� podemos ver el c�digo que registra e implementa el oyente de "change".
colorChooser.getSelectionModel().addChangeListener( new ChangeListener() { public void stateChanged(ChangeEvent e) { Color newColor = colorChooser.getColor(); banner.setColor(newColor); } } );
El oyente de Change obtiene el color seleccionado actualmente desde el selector de color y lo utiliza para seleccionar el color de fondo del banner. Puedes ver C�mo escribir un oyente de Change para informaci�n general sobre los evento de "Change" y sus oyentes.
Un selector de color b�sico , como el utilizado en el programa de ejemplo, es suficiente para muchos programas. Sin embargo, el API ColorChooser permite personalizar un selector de oclor proporcionando un panel de previsionado de nuestro propio dise�o, a�adi�ndolo nuestros propios paneles, o eliminando los panles del selecci�n existentes en el selector de color. Adem�s, la clase ColorChooser proporciona dos m�todos que hacen muy sencillo el uso de un selector de color dentro de un di�logo.
�ColorChooserDemo: Toma 2
Ahora veremosColorChooserDemo2, una versi�n modificada del programa anterior que utiliza m�s API JColorChooser.
Aqu� puedes ver una imagen de ColorChooserDemo2.

Adem�s del fichero fuente principal,ColorChooserDemo2.java, necesitaremos CrayonPanel.java, Banner.java, y las cuatro im�genes de los l�pizes (red.gif, yellow.gif, green.gif, y blue.gif) para ejecutar este programa.
Este programa a�ade un GUI para cambiar el texto del banner y para seleccionar el color del texto. Podemos llamar al selector de color para el texto pulsando sobre el bot�n Choose Text Color..., que trae un di�logo selector de oclor.
Adem�s, este programa personaliza el selector del color de fondo del banner de estas formas.
- Elimina el panel de previsionado
- Elimina todos los paneles selectores por defecto
- A�ade un panel selector personalizado
�Mostrar un Selector de Color en un Di�logo
La clase JColorChooser proporciona dos m�todos de clase que hace sencillo el uso de un selector de color en un dialog modal. El nuevo programa utiliza uno de estos m�todos, showDialog, para mostar el selector de color del texto cuando el usuario pulsa el bot�n Choose Text Color.... Aqu� puedes ver la l�nea de c�digo del ejemplo que trae el di�logo modal del selector de color del texto.
Color newColor = JColorChooser.showDialog(ColorChooserDemo.this, "Choose Text Color", banner.getTextColor());
El di�logo desaparece bajo tres condiciones: el usuario elige un color y pulsa el bot�n OK, el usuario cancela la operaci�n con el bot�n Cancel, el usuario cierra el di�logo. Si el usuario elige un color, el metodo showDialog devuelve el nuevo color. Si el usuario cancela la operaci�n o cierra el di�logo, el m�todo devuelve null. Aqu� podemos ver el c�digo del ejemplo que actualiza el color del texto de acuerdo al valor devuelto por showDialog.
if (newColor != null) { banner.setTextColor(newColor); }
JColorChooser proporciona otro m�todo que nos ayuda a utiliza un selector de color en un di�logo. El m�todo createDialog crea y devuelve un di�logo, permitiendo especificar los oyentes de action para los botones OK y Cancel de la ventana de di�logo. Se utiliza el m�todo show de JDialog para mostrar el di�logo creado con este m�todo.
�Reemplazar o Eliminar el Panel de Previsionado
Nota: Las versiones Swing 1.1 Beta 2 y anteriores contienen un bug por el que el m�todo setPreviewPanel lanza una NullPointerException. Por eso no hemos podido probar y verificar esta secci�n. |
Por defecto, el selector de color muestra un panel de previsionado.
El programa de ejemplo elimina este panel con esta l�nea de c�digo.
colorChooser.setPreviewPanel(new JPanel());
Efectivamente, esto elimina el panel de previsionado porque un JPanel plano no tiene tama�o ni vista por defecto.
Para proporcionar un panel de previsionado personalizado, tambi�n podemos utilizar setPreviewPanel. El componente que pasemos dentro del m�todo deber�a descender de JComponent, especificar un tama�o razonable, y proporcionar una vista personalizada del color actual (obtenida con el m�todo getColor de Component getColor). De hecho, despu�s de a�adir un m�todo getPreferredSize a Banner, podr�amos utilizar un ejemplar de Banner como panel de previsionado.
�Crear un Panel Selector Personalizado
El selector de color por defecto proporciona tres paneles selectores.
- Swatches -- para elegir un color de una selecci�n.
- HSB -- para elegir un color usando el modelo Color-Saturaci�n-Brillo.
- RGB -- para elegir un color usando el modelo Rojo-Verde-Azul.
Se pueden extender los selectores por defecto a�adiendo paneles selectores de nuestro propio dise�o o podemos limitarlo eliminando paneles selectores.
ColorChooserDemo2 hace las dos cosas: elimina todos los paneles por defecto en el selector de color y a�ade el suyo propio.
Aqu� podemos ver el c�digo que elimina los paneles selectores por defecto.
//Remove the default chooser panels AbstractColorChooserPanel panels[] = colorChooser.getChooserPanels(); for (int i = 0; i < panels.length; i ++) { colorChooser.removeChooserPanel(panels[i]); }
El c�digo es correcto, utiliza getChooserPanels para obtener un array conteniendo todos los paneles selectores en el selector de color. Luego, el c�digo hace un bucle a trav�s del array y elimina cada uno de ellos llamando a removeChooserPanel.
El programa utiliza el siguiente c�digo para a�adir un ejemplar de CrayonPanel como un panel selector del selector de color.
colorChooser.addChooserPanel(new CrayonPanel());
Nota: Las versiones Swing 1.1 Beta 2 y anteriores contienen un bug que hace que el m�todo addChooserPanel genera una NullPointerException. Puedes ver el c�digo de See ColorChooserDemo2.java para un atajo recomendado. |
CrayonPanel es una subclase de AbstractColorChooserPanel y sobreescribe los cinco m�todos abstractos definidos en su superclase.
- void updateChooser()
- Este m�todo es llamado cuando el se muestra el panel selector. La implementaci�n de este m�todo en el ejemplo selecciona el bot�n que representa el color seleccionado actualmente.
public void updateChooser() { Color color = getColorFromModel(); if (color.equals(Color.red)) { redCrayon.setSelected(true); } else if (color.equals(Color.yellow)) { yellowCrayon.setSelected(true); } else if (color.equals(Color.green)) { greenCrayon.setSelected(true); } else if (color.equals(Color.blue)) { blueCrayon.setSelected(true); } }
- void buildChooser()
- Crea el GUI que comprende el panel selector. El ejemplo crea cuatro botones -- uno para cada l�piz -- y los a�ade al panel selector.
- String getDisplayName()
- Devuelve el nombre mostrado por el panel selector. El nombre es utilizado para la pesta�a del panel selector. Aqu� tenemos el m�todo getDisplayName del ejemplo: method.
public String getDisplayName() { return "Crayons"; }
- Icon getSmallDisplayIcon()
- Devuelve un peque�o icono que representa este panel selector. El icono es utilizad por la pesta�a del panel selector. La implemtaci�n de este m�todo devuelve null.
- Icon getLargeDisplayIcon()
- Devuelve un icono que representa este panel selector. El icono es utilizad por la pesta�a del panel selector. La implemtaci�n de este m�todo devuelve null.
Adem�s de estos m�todos sobreescritos, CrayonPanel tiene un constructor que s�lo llama a super().
�El API ColorChooser
Las siguientes tablas listas el m�todos y constructores m�s utilizados de JColorChooser.
El API para utilizar selectores de colores se divide en estas categor�as.
�Crear y Mostrar un ColorChooser
M�todo | Prop�sito |
---|---|
JColorChooser()
JColorChooser(Color) JColorChooser(ColorSelectionModel) |
Crea un selector de color. El constructor por defecto crea un selector de color con el color inicial blanco. Se utiliza el segundo constructor para especificar un color inicial diferente. El argumento, ColorSelectionModel, cuando est� presente, proporciona un selector de color con un modelo de selecci�n de color. |
Color showDialog(Component, String, Color) | Crea y muestra un selector de color en un di�logo modal. El argumento Component es el padre del di�logo, el argumento String espec�fica el t�tulo del di�logo, y el argumento Color el color seleccionado inicialmente. |
JDialog createDialog(Component, String, boolean, JColorChooser, ActionListener, ActionListener) | Crea un di�logo para el selector de color especificado. Como en showDialog, el argumento Component es el padre del di�logo y el argumento String espec�fica el t�tulo del di�logo. El argumento boolean especifica si el di�logo es modal. El primer ActionListener es para el bot�n OK, y el segundo para el bot�n Cancel. |
�Personalizar un ColorChooser
M�todo | Prop�sito |
---|---|
void setPreviewPanel(JComponent)
JComponent getPreviewPanel() |
Selecciona u obtiene el componente utilizado para previsionar la selecci�n de color. Para eleminar el panel de previsionado, se utiliza new JPanel(). Para especificar el panel de previsionado por defecto, se utiliza null. |
void setChooserPanels(AbstractColorChooserPanel[])
AbstractColorChooserPanel[] getChooserPanels() |
Selecciona u obtiene los paneles selectores en el selector de color. |
void addChooserPanel(AbstractColorChooserPanel)
AbstractColorChooserPanel removeChooserPanel(AbstractColorChooserPanel) |
A�ade o elimina un panel selector en el selector de color. |
�Seleccionar u Obtener la Selecci�n Actual
M�todo | Prop�sito |
---|---|
void setColor(Color)
void setColor(int, int, int) void setColor(int) Color getColor() |
Selecciona u obtiene el color seleccionado actualmente. Los tres argumentos enteros de setColor especifican los valores RGB del color. El �nico argumento entero de setColor tambi�n espec�fica el color en RGB. Los 8 bits de mayor peso especifican el rojo, los 8 bits siguientes el verde, y los 8 bits de menor peso el azul. |
void setSelectionModel(ColorSelectionModel)
ColorSelectionModel getSelectionModel() |
Selecciona u obtiene el modelo de selecci�n para el selector de color. Este objeto contiene la selecci�n actual y dispara eventos change para los oyentes registrados si la selecci�n cambia. |