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 &amp; 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  }