1
2
3 package org.apache.log4j.chainsaw;
4
5 import java.awt.Component;
6
7 import javax.swing.BorderFactory;
8 import javax.swing.JCheckBox;
9 import javax.swing.JList;
10 import javax.swing.ListCellRenderer;
11 import javax.swing.UIManager;
12 import javax.swing.border.Border;
13 import javax.swing.table.TableColumn;
14
15
16 /***
17 * A ListCellRenderer that display a check box if the value
18 * has been "checked".
19 *
20 * Borrowed heavily from the excellent book "Swing, 2nd Edition" by
21 * Matthew Robinson & Pavel Vorobiev.
22 *
23 * @author Paul Smith
24 *
25 */
26 public abstract class CheckListCellRenderer extends JCheckBox
27 implements ListCellRenderer {
28 private final Border noFocusBorder =
29 BorderFactory.createEmptyBorder(1, 1, 1, 1);
30
31 /***
32 *
33 */
34 public CheckListCellRenderer() {
35 super();
36 setOpaque(true);
37 setBorder(noFocusBorder);
38 }
39
40
41
42
43 public Component getListCellRendererComponent(
44 JList list, Object value, int index, boolean isSelected,
45 boolean cellHasFocus) {
46 setText(((TableColumn)value).getHeaderValue().toString());
47 setBackground(
48 isSelected ? list.getSelectionBackground() : list.getBackground());
49 setForeground(
50 isSelected ? list.getSelectionForeground() : list.getForeground());
51 setFont(list.getFont());
52 setBorder(
53 cellHasFocus ? UIManager.getBorder("List.focusCellHighlightBorder")
54 : noFocusBorder);
55
56 setSelected(isSelected(value));
57 return this;
58 }
59
60 /***
61 * @param value
62 * @return selected flag
63 */
64 protected abstract boolean isSelected(Object value);
65 }