1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 package org.dishevelled.identify;
25
26 import java.awt.Image;
27 import java.awt.Component;
28
29 import javax.swing.JList;
30 import javax.swing.JLabel;
31 import javax.swing.ImageIcon;
32 import javax.swing.DefaultListCellRenderer;
33
34 import org.dishevelled.iconbundle.IconSize;
35 import org.dishevelled.iconbundle.IconState;
36 import org.dishevelled.iconbundle.IconBundle;
37 import org.dishevelled.iconbundle.IconTextDirection;
38
39
40
41
42
43
44
45 public class IdListCellRenderer
46 extends StripeListCellRenderer
47 {
48
49 public static final IconSize DEFAULT_ICON_SIZE = IconSize.DEFAULT_16X16;
50
51
52 private IconSize iconSize;
53
54
55 private transient ImageIcon imageIcon;
56
57
58
59
60
61
62
63
64 public IdListCellRenderer()
65 {
66 this(DEFAULT_ICON_SIZE);
67 }
68
69
70
71
72
73
74
75 public IdListCellRenderer(final IconSize iconSize)
76 {
77 super();
78 setIconSize(iconSize);
79 }
80
81
82
83
84
85
86
87 public final IconSize getIconSize()
88 {
89 return iconSize;
90 }
91
92
93
94
95
96
97
98
99 public final void setIconSize(final IconSize iconSize)
100 {
101 if (iconSize == null)
102 {
103 throw new IllegalArgumentException("iconSize must not be null");
104 }
105 IconSize oldIconSize = this.iconSize;
106 this.iconSize = iconSize;
107 firePropertyChange("iconSize", oldIconSize, this.iconSize);
108 }
109
110 @Override
111 public Component getListCellRendererComponent(final JList list,
112 final Object value,
113 final int index,
114 final boolean isSelected,
115 final boolean hasFocus)
116 {
117 JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, hasFocus);
118
119 String name = IdentifyUtils.getNameFor(value);
120 label.setText(name);
121
122 IconBundle iconBundle = IdentifyUtils.getIconBundleFor(value);
123
124 if (iconBundle == null)
125 {
126 label.setIcon(null);
127 }
128 else
129 {
130 IconTextDirection textDirection = IdentifyUtils.determineTextDirection(label);
131 Image image = iconBundle.getImage(label, textDirection, IconState.NORMAL, iconSize);
132
133 if (imageIcon == null)
134 {
135 imageIcon = new ImageIcon(image);
136 }
137 else
138 {
139 imageIcon.setImage(image);
140 }
141
142 label.setIcon(imageIcon);
143 }
144
145 return label;
146 }
147 }