package com.github.pfichtner.jrunalyser.ui.tracklist; import java.awt.Component; import java.util.List; import javax.swing.Icon; import javax.swing.JTable; import javax.swing.RowSorter; import javax.swing.UIManager; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.JTableHeader; import javax.swing.table.TableModel; import com.github.pfichtner.jrunalyser.base.data.Distance; import com.github.pfichtner.jrunalyser.base.data.Duration; import com.github.pfichtner.jrunalyser.ui.format.DistanceFormatter; import com.github.pfichtner.jrunalyser.ui.format.DistanceFormatter.Type; import com.github.pfichtner.jrunalyser.ui.format.DurationFormatter; public class TableHeaderRenderer extends DefaultTableCellRenderer { private static final long serialVersionUID = -8728929563494972224L; private final DistanceFormatter df = new DistanceFormatter(Type.SHORT); private final DurationFormatter du = new DurationFormatter( com.github.pfichtner.jrunalyser.ui.format.DurationFormatter.Type.SHORT_SYMBOLS); @Override protected void setValue(Object value) { if (value instanceof Duration) { super.setValue(this.du.format((Duration) value)); } else if (value instanceof Distance) { super.setValue(this.df.format((Distance) value)); } else super.setValue(value); } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); JTableHeader tableHeader = table.getTableHeader(); if (tableHeader != null) { setForeground(tableHeader.getForeground()); } setIcon(getIcon(table, column)); setBorder(UIManager.getBorder("TableHeader.cellBorder")); //$NON-NLS-1$ return this; } protected Icon getIcon(JTable table, int column) { RowSorter.SortKey sortKey = getSortKey(table, column); if (sortKey != null && table.convertColumnIndexToView(sortKey.getColumn()) == column) { switch (sortKey.getSortOrder()) { case ASCENDING: return UIManager.getIcon("Table.ascendingSortIcon"); //$NON-NLS-1$ case DESCENDING: return UIManager.getIcon("Table.descendingSortIcon"); //$NON-NLS-1$ } } return null; } protected RowSorter.SortKey getSortKey(JTable table, int column) { RowSorter<? extends TableModel> rowSorter = table.getRowSorter(); if (rowSorter == null) { return null; } List<? extends RowSorter.SortKey> sortedColumns = rowSorter .getSortKeys(); return sortedColumns.isEmpty() ? null : sortedColumns.get(0); } }