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
    18  package org.apache.log4j.chainsaw;
    19
    20  import javax.swing.*;
    21  import javax.swing.table.DefaultTableCellRenderer;
    22  import javax.swing.table.JTableHeader;
    23  import java.awt.*;
    24
    25
    26  /**
    27   * A Table Column header renederer that displays a nice Up/Down arrow
    28   * depending on whether this column is the current sort column or not,
    29   * and which way the sort is functioning
    30   *
    31   * @author Claude Duguay
    32   */
    33  public class SortHeaderRenderer extends DefaultTableCellRenderer {
    34      public static final Icon NONSORTED = new SortArrowIcon(SortArrowIcon.NONE);
    35      public static final Icon ASCENDING = new SortArrowIcon(SortArrowIcon.ASCENDING);
    36      public static final Icon DECENDING = new SortArrowIcon(SortArrowIcon.DECENDING);
    37
    38      public SortHeaderRenderer() {
    39          setHorizontalTextPosition(LEFT);
    40          setHorizontalAlignment(CENTER);
    41      }
    42
    43      public Component getTableCellRendererComponent(
    44          JTable table, Object value, boolean isSelected, boolean hasFocus, int row,
    45          int col) {
    46          int index = -1;
    47          boolean ascending = true;
    48
    49          if (table instanceof JSortTable) {
    50              JSortTable sortTable = (JSortTable) table;
    51              index = sortTable.getSortedColumnIndex();
    52              ascending = sortTable.isSortedColumnAscending();
    53          }
    54
    55          if (table != null) {
    56              JTableHeader header = table.getTableHeader();
    57
    58              if (header != null) {
    59                  setForeground(header.getForeground());
    60                  setBackground(header.getBackground());
    61                  Font font = header.getFont();
    62                  if (col == index) {
    63
    64                      setFont(new Font(font.getName(), Font.BOLD, font.getSize()));
    65                  } else {
    66                      setFont(font);
    67                  }
    68              }
    69          }
    70
    71          Icon icon = ascending ? ASCENDING : DECENDING;
    72          setIcon((col == index) ? icon : NONSORTED);
    73          setText((value == null) ? "" : value.toString());
    74          setBorder(UIManager.getBorder("TableHeader.cellBorder"));
    75
    76          return this;
    77      }
    78  }