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