View Javadoc

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    /* (non-Javadoc)
41     * @see javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean)
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  }