View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.log4j.chainsaw;
18  
19  import java.awt.Component;
20  
21  import javax.swing.BorderFactory;
22  import javax.swing.JCheckBox;
23  import javax.swing.JList;
24  import javax.swing.ListCellRenderer;
25  import javax.swing.UIManager;
26  import javax.swing.border.Border;
27  import javax.swing.table.TableColumn;
28  
29  
30  /**
31   * A ListCellRenderer that display a check box if the value
32   * has been "checked".
33   * 
34   * Borrowed heavily from the excellent book "Swing, 2nd Edition" by
35   * Matthew Robinson & Pavel Vorobiev.
36   * 
37   * @author Paul Smith
38   *
39   */
40  public abstract class CheckListCellRenderer extends JCheckBox
41    implements ListCellRenderer {
42    private final Border noFocusBorder =
43      BorderFactory.createEmptyBorder(1, 1, 1, 1);
44  
45    /**
46     *
47     */
48    public CheckListCellRenderer() {
49      super();
50      setOpaque(true);
51      setBorder(noFocusBorder);
52    }
53  
54    /* (non-Javadoc)
55     * @see javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean)
56     */
57    public Component getListCellRendererComponent(
58      JList list, Object value, int index, boolean isSelected,
59      boolean cellHasFocus) {
60  	  setText(((TableColumn)value).getHeaderValue().toString());
61      setBackground(
62        isSelected ? list.getSelectionBackground() : list.getBackground());
63      setForeground(
64        isSelected ? list.getSelectionForeground() : list.getForeground());
65      setFont(list.getFont());
66      setBorder(
67        cellHasFocus ? UIManager.getBorder("List.focusCellHighlightBorder")
68                     : noFocusBorder);
69  
70      setSelected(isSelected(value));
71      return this;
72    }
73  
74  /**
75   * @param value
76   * @return selected flag
77   */
78  protected abstract boolean isSelected(Object value);
79  }