The Java Program: SortColumnHeaderRenderer.java
1 import java.awt.Component;
2 import java.awt.BorderLayout;
3
4 import javax.swing.JPanel;
5 import javax.swing.JTable;
6 import javax.swing.SwingConstants;
7 import javax.swing.LookAndFeel;
8 import javax.swing.table.TableCellRenderer;
9 import javax.swing.table.DefaultTableCellRenderer;
10 import javax.swing.plaf.basic.BasicArrowButton;
11
12
13
14 public class SortColumnHeaderRenderer implements TableCellRenderer {
15
16 protected final SortTableModel model;
17 protected final TableCellRenderer rend;
18
19 public SortColumnHeaderRenderer (SortTableModel m, TableCellRenderer r) {
20 model = m; rend = r;
21 }
22
23 public SortColumnHeaderRenderer (final SortTableModel m) {
24 this (m, new DefaultTableCellRenderer());
25 }
26
27 public Component getTableCellRendererComponent (JTable table, Object value,
28 boolean isSelected, boolean hasFocus, int row, int column) {
29
30 final JPanel panel = new JPanel();
31 LookAndFeel.installColorsAndFont (panel,
32 "TableHeader.background",
33 "TableHeader.foreground",
34 "TableHeader.font");
35 LookAndFeel.installBorder (panel, "TableHeader.cellBorder");
36 panel.setLayout (new BorderLayout());
37
38 final Component head = rend.getTableCellRendererComponent (table, value, isSelected, hasFocus, row, column);
39 panel.add (head, BorderLayout.CENTER);
40
41
42 final int index = table.convertColumnIndexToModel (column);
43
44 if (index == model.getSortColumn()) {
45 final int DIR = model.isSortAscending() ? SwingConstants.NORTH : SwingConstants.SOUTH;
46 final BasicArrowButton bab = new BasicArrowButton (DIR);
47 panel.add (bab, BorderLayout.EAST);
48 }
49 return panel;
50 }
51 }