2010-12-10 26 views
5

El color de fondo del elemento seleccionado en un JComboBox no editable es una especie de azul:Color de fondo del elemento seleccionado en un editable JComboBox

alt text

¿Hay alguna manera de hacer de este un color diferente, como el blanco, por ejemplo?

+0

relacionada, posiblemente duplicados, no puede decidir: http://stackoverflow.com/questions/10258224/change-background-color-editable-jcombobox –

Respuesta

8

Esto debería funcionar

jComboBox1.setRenderer(new DefaultListCellRenderer() { 
    @Override 
    public void paint(Graphics g) { 
     setBackground(Color.WHITE); 
     setForeground(Color.BLACK); 
     super.paint(g); 
    } 
}); 
+0

Esto solo funciona, si no necesita reemplazar el método getListCellRendererComponent del CellRenderer. Si tiene que hacer esto, use setSelectionBackground, como se mostró en la respuesta de camickr. –

3

¿Has probado a escribir el tuyo propio, personalizado, ListCellRenderer?

Cuando se le pide que el método para proporcionar un componente de representación de células se obtienen los siguientes argumentos:

public Component getListCellRendererComponent(JList list, 
               Object value, 
               int index, 
               boolean isSelected, 
               boolean cellHasFocus) { 
+1

Utilice el código proporcionado Aioob y simplemente arrojar valor a un JLabel y establecer su fondo para el color que desee. – user489041

+0

Sí, lo intenté. Eso puede cambiar la apariencia de los elementos del menú como los ve en el cuadro desplegable. Sin embargo, no cambia la apariencia del elemento seleccionado. –

6

El fondo asignado por el procesador está anulado por el color de fondo de selección de la JList que se utiliza en el ventana emergente para el cuadro combinado. Consulte el método "paintCurrentValue" de la clase BasicComboBoxUI. Por lo tanto, la solución sería:

JComboBox comboBox = new JComboBox(...); 
Object child = comboBox.getAccessibleContext().getAccessibleChild(0); 
BasicComboPopup popup = (BasicComboPopup)child; 
JList list = popup.getList(); 
list.setSelectionBackground(Color.RED); 

Esto afectará también la representación de la ventana emergente. Si no desea que afecte a la ventana emergente, deberá crear un renderizador personalizado para establecer específicamente el fondo de los elementos seleccionados.

Cuestiones relacionadas