/*
* 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;
}
}