2010-12-10 19 views

Antwort

8

Dies sollte funktionieren

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

Dies funktioniert nur, wenn Sie die Methode getListCellRendererComponent des CellRenderer nicht überschreiben müssen. Wenn Sie dies tun müssen, verwenden Sie die setSelectionBackground, wie es in Camickrs Antwort gezeigt wurde. –

3

Haben Sie versucht, Ihre eigenen, benutzerdefinierten, ListCellRenderer schreiben?

Wenn das Verfahren zur Herstellung einer Zelle-Rendering-Komponente, die Sie die folgenden Argumente bekommen gebeten wird:

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

den Code Aioob Gebrauch zur Verfügung gestellt und einfach den Wert in ein JLabel umwandeln und den Hintergrund auf die gewünschte Farbe setzen. – user489041

+0

Ja, das habe ich versucht. Dies kann die Darstellung der Menüelemente ändern, wie Sie sie in der Dropdown-Liste sehen. Es ändert jedoch nicht das Aussehen des ausgewählten Elements. –

6

Der Hintergrund vom Renderer zugewiesen wird durch die Auswahl Hintergrundfarbe des JList außer Kraft gesetzt, die in der verwendet wird, Popup für das Kombinationsfeld. Überprüfen Sie die "paintCurrentValue" -Methode der BasicComboBoxUI-Klasse. Die Problemumgehung wäre also:

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

Dies wirkt sich auch auf das Rendering des Popups aus. Wenn Sie nicht möchten, dass das Popup betroffen ist, müssen Sie einen benutzerdefinierten Renderer erstellen, um den Hintergrund der ausgewählten Elemente festzulegen.

Verwandte Themen