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 javax.swing.*;
20  import javax.swing.border.Border;
21  import javax.swing.table.TableColumn;
22  import java.awt.*;
23  
24  
25  /**
26   * A ListCellRenderer that display a check box if the value
27   * has been "checked".
28   * <p>
29   * Borrowed heavily from the excellent book "Swing, 2nd Edition" by
30   * Matthew Robinson &amp; Pavel Vorobiev.
31   *
32   * @author Paul Smith
33   */
34  public abstract class CheckListCellRenderer extends JCheckBox
35      implements ListCellRenderer {
36      private final Border noFocusBorder =
37          BorderFactory.createEmptyBorder(1, 1, 1, 1);
38  
39      /**
40       *
41       */
42      public CheckListCellRenderer() {
43          super();
44          setOpaque(true);
45          setBorder(noFocusBorder);
46      }
47  
48      /* (non-Javadoc)
49       * @see javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean)
50       */
51      public Component getListCellRendererComponent(
52          JList list, Object value, int index, boolean isSelected,
53          boolean cellHasFocus) {
54          setText(((TableColumn) value).getHeaderValue().toString());
55          setBackground(
56              isSelected ? list.getSelectionBackground() : list.getBackground());
57          setForeground(
58              isSelected ? list.getSelectionForeground() : list.getForeground());
59          setFont(list.getFont());
60          setBorder(
61              cellHasFocus ? UIManager.getBorder("List.focusCellHighlightBorder")
62                  : noFocusBorder);
63  
64          setSelected(isSelected(value));
65          return this;
66      }
67  
68      /**
69       * @param value
70       * @return selected flag
71       */
72      protected abstract boolean isSelected(Object value);
73  }