Como cambiar el boton de un JComboBox en Java
Para cambiar el botón o los colores del botón de un JComboBox
en java hay que crear una clase que herede de BasicComboBoxUI
y sobreescribir el método createArrowButton()
.
Veamos los detalles.
Tienes el código completo de este ejemplo en JComboBoxRender.java. Ahí también se cambian los colores del JComboBox
. Salvo que tengas interés, ignora toda la parte de heredar y cambiar el BasicComboBoxRenderer
. Cualquier duda de este tutorial o de java en general suelo atender en el foro de java, python y otros.
Crear el botón para el JComboBox
[editar]
El botón del JComboBox
no es más que un JButton
normal, así que podemos instanciar uno cualquiera, a nuestro gusto tanto en colores como icono, y usarlo. En este ejemplo, sin embargo, usaremos directamente la clase BasicArrowButton
que es el botón por defecto del JComboBox
. Eso sí, le daremos nuestros propios colores. El codigo para crear este botón es
// Usamos BasicArrowButton que es el de defecto, poniéndole los colores que nos apetezcan.
// Pero puedes crear aquí tu propio botón con el estilo que quieras.
return new BasicArrowButton(SwingConstants.SOUTH, Color.YELLOW, Color.ORANGE, Color.RED, Color.WHITE);
Los parámetros son:
- Dirección de la flecha. Por defecto es hacia abajo
SwingConstants.SOUTH
. - Color de background, es decir, el color del botón. Le hemos puesto
Color.YELLOW
- Color de sombra, se usa en los bordes del botón para conseguir el efecto relieve. Le hemos puesto
Color.ORANGE
- Color de sombra oscura, se usa en los bordes del botón para conseguir el efecto relieve. Le hemos puesto
Çolor.RED
- Color brillante, se usa en los bordes del botón para conseguir el efecto relieve. Le hemos puesto
Color.WHITE
La siguiente imagen muestra al botón ampliado, para que veas dónde van los colores
Crear nuestro propio BasicComboBoxUI
[editar]
Ahora que sabemos crear el botón, ponemos este código dentro de una clase que herede de BasicComboBoxUI
, sobreescribiendo el método createArrowButton()
public static class MyArrow extends BasicComboBoxUI {
@Override
protected JButton createArrowButton() {
// Usamos BasicArrowButton que es el de defecto, poniéndole los colores que nos apetezcan.
// Pero puedes crear aquí tu propio botón con el estilo que quieras.
return new BasicArrowButton(SwingConstants.SOUTH, Color.YELLOW, Color.ORANGE, Color.RED, Color.WHITE);
}
}
Nada especilamente reseñable. Sólo fíjate que el método debe devolver un JButton
, así que no estamos obligados a que sea un BasicArrowButton
, podemos crear y modificar cualquier JButton
a nuestro gusto.
Pasarle al JComboBox
nuestro BasicComboBoxUI
[editar]
Ahora solo queda crear el JComboBox
y pasarle nuestro BasicComboBoxUI
. El siguiente código muestra como hacerlo
JComboBox<String> combo = new JComboBox<>();
// Cambiamos la flecha
combo.setUI(new MyArrow());
y esto es todo. Ya podemos usar el JComboBox
de la forma habitual.
Cambiar los colores de los botones de todos los JComboBox
[editar]
Si no queremos cambiar los colores del botón de un soloJComboBox
específico, podemos cambiarlos todos de golpe poniéndolos de esta forma
UIManager.put("comboBox.buttonHighlight",Color.WHITE);
UIManager.put("comboBox.buttonDarkShadow",Color.RED);
UIManager.put("comboBox.buttonShadow",Color.ORANGE);
UIManager.put("comboBox.buttonDarkShadow",Color.RED);
UIManager.put("comboBox.buttonBackground",Color.RED);
Basta poner este código una sola vez antes de liarnos a construir o visualizar ventanas.