/* * Created by Philipp Marx on 19.11.2006 * */ package de.smigfu.swingtable; import java.awt.Component; import javax.swing.Icon; import javax.swing.JLabel; import javax.swing.JTable; import javax.swing.LookAndFeel; import javax.swing.SwingConstants; import javax.swing.UIManager; import javax.swing.plaf.LabelUI; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.JTableHeader; import com.sun.java.swing.plaf.windows.WindowsLabelUI; /** * This is a default-implementation for a SwingTableHeaderRenderer. * * This class can be subclassed. * * @version $Revision$ $Date$ * * @author Philipp Marx, last modified by $Author$ */ public class DefaultSwingTableHeaderRenderer implements CmpTableHeaderRenderer { /** The mark which should be displayed in the tableheader. */ private Object mark; /** The index of the column (as they are ordered in the table). */ private int viewColumnIndex; /** * Constructs a DefaultSwingTableHeaderRenderer. * */ public DefaultSwingTableHeaderRenderer() { this.mark = null; this.viewColumnIndex = -1; } /* (non-Javadoc) * @see javax.swing.table.TableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int) */ public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { // Use the DefaultTableCellRenderer to do the common work. Component c = new DefaultTableCellRenderer().getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); // DefaultTableCellRenderer will return a label. JLabel label = ((JLabel) c); // Take some more apperance actions (center text, set border and set colors). label.setHorizontalAlignment(SwingConstants.CENTER); label.setBorder(UIManager.getBorder("TableHeader.cellBorder")); if (table != null) { JTableHeader header = table.getTableHeader(); if (header != null) { label.setForeground(header.getForeground()); label.setBackground(header.getBackground()); label.setFont(header.getFont()); } } // If this is the "sorted" column we want to set the "mark". if (column == this.viewColumnIndex) { // If mark is an icon, we handle this appropriate. if (this.mark instanceof Icon) { label.setIcon((Icon) this.mark); } else { String text = label.getText(); text += " (" + String.valueOf(this.mark) + ")"; label.setText(text); } } return c; } /* (non-Javadoc) * @see de.smigfu.swingtable.SwingTableHeaderRenderer#setSortedColumnMark(java.lang.Object, int) */ public void setSortedColumnMark(Object mark, int viewColumnIndex) { this.mark = mark; this.viewColumnIndex = viewColumnIndex; } }