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 100 101 102
| public class JComboSelect {
private static final Color NO_SELECTION_COLOR = Color.LIGHT_GRAY;
public static void main(String[] args) {
JFrame frame = new JFrame("Démo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new GridBagLayout());
Item[] comboItems = {null,new Item("Item 1",Color.RED),new Item("Item 2",Color.CYAN),new Item("Item 3",Color.GREEN)};
JComboBox<Item> combo = new JComboBox<>(comboItems);
combo.setRenderer(new ItemRenderer());
combo.setSelectedItem(null); // aucune sélection par défaut
panel.add(combo);
frame.add(panel);
frame.setSize(300, 300);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static class ItemRenderer extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected,
boolean cellHasFocus) {
Component component = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if ( value instanceof Item ) {
Item item = (Item)value;
setText(item.getName());
setIcon(item.getIcon());
}
else {
setText("Pas de sélection");
setIcon(null);
if ( !isSelected ) {
setForeground(NO_SELECTION_COLOR);
}
}
return component;
}
}
public static class Item {
private Color color;
private String name;
private Icon icon;
public Item(String name, Color color) {
this.color=color;
this.name=name;
this.icon=JComboSelect.getIcon(color);
}
public String getName() {
return name;
}
public Color getColor() {
return color;
}
public Icon getIcon() {
return icon;
}
}
private static Map<Color, Icon> colorIcons = new HashMap<>();
public static Icon getIcon(Color color) {
Icon icon = colorIcons.get(color);
if ( icon==null ) {
BufferedImage image = new BufferedImage(16,16,BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
g.setColor(Color.BLACK);
g.drawRect(0, 0, 16, 16);
g.setColor(color);
g.fillRect(1, 1, 14, 14);
g.dispose();
icon = new ImageIcon(image);
colorIcons.put(color, icon);
}
return icon;
}
} |
Partager