|
@@ -26,7 +26,9 @@ import java.awt.Component;
|
26
|
26
|
import java.util.Map.Entry;
|
27
|
27
|
|
28
|
28
|
import javax.swing.DefaultListCellRenderer;
|
|
29
|
+import javax.swing.JLabel;
|
29
|
30
|
import javax.swing.JList;
|
|
31
|
+import javax.swing.ListCellRenderer;
|
30
|
32
|
|
31
|
33
|
/**
|
32
|
34
|
* Map entry renderer.
|
|
@@ -39,22 +41,49 @@ public final class MapEntryRenderer extends DefaultListCellRenderer {
|
39
|
41
|
* objects being unserialized with the new class).
|
40
|
42
|
*/
|
41
|
43
|
private static final long serialVersionUID = 1;
|
|
44
|
+ /** Current list cell renderer. */
|
|
45
|
+ private final ListCellRenderer renderer;
|
|
46
|
+ /** Renderer cast to JLabel. */
|
|
47
|
+ private final JLabel label;
|
42
|
48
|
|
|
49
|
+ /**
|
|
50
|
+ * Creates a new map entry renderer. Renders a map entry as its value.
|
|
51
|
+ *
|
|
52
|
+ * @param renderer Renderer
|
|
53
|
+ */
|
|
54
|
+ public MapEntryRenderer(final ListCellRenderer renderer) {
|
|
55
|
+ /*
|
|
56
|
+ * All List cell renderers in Swing are JLabels, as checked by asserts
|
|
57
|
+ * in odd UI delegates. Check and cast here to access nice convenience
|
|
58
|
+ * methods of a jabel, if not create a jabel and return that as the
|
|
59
|
+ * component. This is mainly a workaround for look and feel's based on
|
|
60
|
+ * synth and add their own rendering.
|
|
61
|
+ */
|
|
62
|
+ if (renderer instanceof JLabel) {
|
|
63
|
+ this.label = (JLabel) renderer;
|
|
64
|
+ } else {
|
|
65
|
+ this.label = new JLabel();
|
|
66
|
+ }
|
|
67
|
+ this.renderer = renderer;
|
|
68
|
+ }
|
|
69
|
+
|
|
70
|
+ /** {@inheritDoc} */
|
43
|
71
|
@Override
|
44
|
72
|
public Component getListCellRendererComponent(final JList list,
|
45
|
73
|
final Object value, final int index, final boolean isSelected,
|
46
|
74
|
final boolean cellHasFocus) {
|
47
|
75
|
|
48
|
|
- super.getListCellRendererComponent(list, value, index, isSelected,
|
|
76
|
+ renderer.getListCellRendererComponent(
|
|
77
|
+ list, value, index, isSelected,
|
49
|
78
|
cellHasFocus);
|
50
|
79
|
if (value == null) {
|
51
|
|
- setText("Any");
|
|
80
|
+ label.setText("Any");
|
52
|
81
|
} else if (value instanceof Entry) {
|
53
|
|
- setText((String) ((Entry<?, ?>) value).getValue());
|
|
82
|
+ label.setText((String) ((Entry<?, ?>) value).getValue());
|
54
|
83
|
} else {
|
55
|
|
- setText(value.toString());
|
|
84
|
+ label.setText(value.toString());
|
56
|
85
|
}
|
57
|
86
|
|
58
|
|
- return this;
|
|
87
|
+ return label;
|
59
|
88
|
}
|
60
|
89
|
}
|