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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
   | import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
 
import javax.swing.BorderFactory;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListCellRenderer;
 
 
public class Test {
 
 
	public static void main(String[] args) {
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
		Vector<Ville> villes = new Vector<Ville>();
		villes.add(new Ville("Paris", "FR"));
		villes.add(new Ville("Lyon", "FR"));
		villes.add(new Ville("Marseille", "FR"));
		villes.add(new Ville("Madrid", "ES"));
		villes.add(new Ville("Barcelone", "ES"));
		villes.add(new Ville("Valencia", "ES"));
 
		final JComboBox combo = new JComboBox(villes);
		combo.setRenderer(new Ville());
		combo.addActionListener(new ActionListener() {			
			public void actionPerformed(ActionEvent e) {
				System.out.println(((Ville)combo.getSelectedItem()).getNom());
			}
		});
 
		frame.add(combo);
		frame.setSize(200, 50);
		frame.setVisible(true);
	}
 
 
}
 
class Ville implements ListCellRenderer {
	private String nom;
	private String pays;
 
	public Ville(){};
 
	public Ville(String nom, String pays) {
		this.nom = nom;
		this.pays = pays;
	}
 
	public String getNom(){
		return nom;
	}
 
	public String getPays(){
		return pays;
	}
 
	public Component getListCellRendererComponent(JList list, Object value,	int index, boolean isSelected, boolean cellHasFocus) {
		// On prépare le composent qui servira à afficher une ligne de la ComboBox
		JPanel pan = new JPanel(new BorderLayout());
 
		// On indique que le paramètre value est de type Ville (ce qui permettra d'utiliser les méthodes de la class Ville)
		Ville ville = (Ville)value;
 
		// On fabrique des Label pour le nom de la ville et du pays
		JLabel nom = new JLabel(ville.getNom());
			// Pour que la coloration du background d'un JLabel soit visible, il faut que le composant soit opaque
			nom.setOpaque(true);
 
		JLabel pays = new JLabel(ville.getPays(), JLabel.CENTER);
			// Ajout du cardre
			pays.setBorder(BorderFactory.createLineBorder(Color.BLACK));
			pays.setPreferredSize(new Dimension(30, 30));
 
		// Gestion de la couleur du fond
		if(ville.getPays().equals("FR"))nom.setBackground(new Color(207, 225, 244));
		else if(ville.getPays().equals("ES"))nom.setBackground(new Color(255, 126, 88));
 
		// 
		if(isSelected)nom.setBackground(Color.GRAY);
 
		// Ajout des Label dans notre composant représentant une ligne de la ComboBox
		pan.add(nom, BorderLayout.CENTER);
		pan.add(pays, BorderLayout.EAST);
 
		// On retourne notre Composant
		return pan;
	}
} | 
Partager