2010-12-10 14 views

risposta

8

Questo dovrebbe funzionare

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

Funziona solo se non è necessario eseguire l'override del metodo getListCellRendererComponent di CellRenderer. Se devi farlo, usa setSelectionBackground, come mostrato nella risposta di camickr. –

3

Hai provato a scrivere da solo, personalizzato, ListCellRenderer?

Quando questo metodo viene chiesto di fornire un componente cellulare di rendering si ottengono i seguenti argomenti:

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

Usa il codice fornito Aioob e basta assegnare valore a una JLabel e impostare lo sfondo sul colore desiderato. – user489041

+0

Sì, ci ho provato. Ciò può modificare l'aspetto delle voci del menu come le vedi nella casella a discesa. Tuttavia, non cambia l'aspetto dell'elemento selezionato. –

6

Lo sfondo assegnato dal renderer viene sovrascritto dal colore selezione sfondo del JList che viene utilizzato nella popup per la casella combinata. Controlla il metodo "paintCurrentValue" della classe BasicComboBoxUI. Quindi la soluzione alternativa sarebbe:

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

Ciò influenzerà anche il rendering del popup. Se non vuoi che influenzi il popup, dovrai creare un renderizzatore personalizzato per impostare in modo specifico lo sfondo degli elementi selezionati.

Problemi correlati