2010-12-10 3 views

Répondre

8

Cela devrait fonctionner

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

Cela ne fonctionne que si vous n'avez pas besoin de surcharger la méthode getListCellRendererComponent du CellRenderer. Si vous devez le faire, utilisez setSelectionBackground, comme cela a été montré dans la réponse de camickr. –

3

Avez-vous essayé d'écrire le vôtre, personnalisé, ListCellRenderer?

Lorsque cette méthode est demandé de fournir un composant de rendu cellule que vous obtenez les arguments suivants:

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

Utilisez le code fourni Aioob et juste jeter de la valeur à un JLabel et définir son arrière-plan à la couleur que vous voulez. – user489041

+0

Oui, j'ai essayé ça. Cela peut changer l'apparence des éléments de menu tels que vous les voyez dans la liste déroulante. Cependant, cela ne change pas l'apparence de l'élément sélectionné. –

6

L'arrière-plan attribué par le moteur de rendu est outrepassée par la couleur d'arrière-plan de sélection des JList qui est utilisé dans la popup pour la zone de liste déroulante. Découvrez la méthode "paintCurrentValue" de la classe BasicComboBoxUI. Donc, la solution de contournement serait:

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

Cela affectera également le rendu du popup. Si vous ne voulez pas que cela affecte la fenêtre contextuelle, vous devrez créer un moteur de rendu personnalisé pour définir spécifiquement l'arrière-plan des éléments sélectionnés.