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 java.awt.*;
    21
    22  import javax.swing.*;
    23  import javax.swing.table.*;
    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   * @author Claude Duguay
    31  */
    32  public class SortHeaderRenderer extends DefaultTableCellRenderer {
    33    public static final Icon NONSORTED = new SortArrowIcon(SortArrowIcon.NONE);
    34    public static final Icon ASCENDING = new SortArrowIcon(SortArrowIcon.ASCENDING);
    35    public static final Icon DECENDING = new SortArrowIcon(SortArrowIcon.DECENDING);
    36
    37    public SortHeaderRenderer() {
    38      setHorizontalTextPosition(LEFT);
    39      setHorizontalAlignment(CENTER);
    40    }
    41
    42    public Component getTableCellRendererComponent(
    43      JTable table, Object value, boolean isSelected, boolean hasFocus, int row,
    44      int col) {
    45      int index = -1;
    46      boolean ascending = true;
    47
    48      if (table instanceof JSortTable) {
    49        JSortTable sortTable = (JSortTable) table;
    50        index = sortTable.getSortedColumnIndex();
    51        ascending = sortTable.isSortedColumnAscending();
    52      }
    53
    54      if (table != null) {
    55        JTableHeader header = table.getTableHeader();
    56
    57        if (header != null) {
    58          setForeground(header.getForeground());
    59          setBackground(header.getBackground());
    60          Font font = header.getFont();
    61  		if (col == index) {
    62
    63  			setFont(new Font(font.getName(), Font.BOLD, font.getSize()));
    64  		}
    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  }