Bonjour,

Je me suis rendu compte que lorsque l'on implémente un renderer (basé sur DefaultListCellRenderer) on n'a pas accès au JLabel de l'item selectionné dans une JComboBox. Celui dont l'index est égal à -1.

Voici un exemple tout simple qui le met en évidence, je me contente de modifié la couleur du texte. Mais la couleur du texte de l'item sélectionné reste noir.

Comment fait-on pour (non pas modifier la couleur ce qui en soit m'intéresse fort peu) mais pour accéder au composant qui affiche l'item sélectionné ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import java.awt.Color;
import java.awt.Component;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
 
public class TestListRenderer {
 
	public static void main(String[] args) {
		JComboBox combo = new JComboBox();
 
		combo.setRenderer(new Renderer());
 
		combo.addItem("Jongleur");
		combo.addItem("Clown");
		combo.addItem("Trapéziste");
 
		JPanel panel = new JPanel();
		panel.add(combo);
		panel.add(new JComboBox());
 
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setContentPane(panel);
		frame.pack();
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
 
	}
 
}
 
class Renderer extends DefaultListCellRenderer {
 
	@Override
	public Component getListCellRendererComponent(JList list, Object value,
			int index, boolean isSelected, boolean cellHasFocus) {
		super.getListCellRendererComponent(list, null, index, isSelected,
				cellHasFocus);
 
		setText(value.toString());
		setForeground(Color.BLUE);
 
		return this;
	}
 
}