1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 }