private class PropertyTableHeaderRenderer extends DefaultTableCellRenderer {
private Border m_borNormalBorder, m_borSelectedBorder;
private Icon m_icAscendingIcon, m_icDescendingIcon, m_icEmptyIcon;
private JLabel m_jbLabel = null;
//
private int m_iSortedColumn = 0;
private boolean m_bAscending = false;
public PropertyTableHeaderRenderer(){
setHorizontalTextPosition( LEFT );
m_borNormalBorder = BorderFactory.createBevelBorder( BevelBorder.RAISED );
m_borSelectedBorder = BorderFactory.createBevelBorder( BevelBorder.LOWERED );
//
// Hier werden die Icons erzeugt
m_icAscendingIcon = createAscendingIcon();
m_icDescendingIcon = createDescendingIcon();
m_icEmptyIcon = createEmptyIcon();
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
m_jbLabel = new JLabel();
m_jbLabel.setText(value.toString());
//
// Sortierte Spalte und ist selektiert
if( m_iSortedColumn == column && isSelected) {
m_jbLabel.setBorder( m_borSelectedBorder );
if( m_bAscending ) {
m_jbLabel.setIcon( m_icAscendingIcon );
}
else {
m_jbLabel.setIcon( m_icDescendingIcon );
}
}
// Sortierte Spalte und ist nicht selektiert
else if( m_iSortedColumn == column ) {
m_jbLabel.setBorder( m_borNormalBorder );
if( m_bAscending ) {
m_jbLabel.setIcon( m_icAscendingIcon );
}
else {
m_jbLabel.setIcon( m_icDescendingIcon );
}
}
else {
m_jbLabel.setBorder( m_borNormalBorder );
m_jbLabel.setIcon( m_icEmptyIcon );
}
return m_jbLabel;
}
public void sorted( int sorted_column, boolean ascending ) {
this.m_iSortedColumn = sorted_column;
this.m_bAscending = ascending;
}
protected Icon createAscendingIcon(){
return new Icon(){
public int getIconHeight() {
return 3;
}
public int getIconWidth() {
return 5;
}
public void paintIcon(Component c, Graphics g, int x, int y) {
g.setColor( Color.BLACK );
g.drawLine( x, y, x+4, y );
g.drawLine( x+1, y+1, x+3, y+1 );
g.drawLine( x+2, y+2, x+2, y+2 );
}
};
}
protected Icon createDescendingIcon(){
return new Icon(){
public int getIconHeight() {
return 3;
}
public int getIconWidth() {
return 5;
}
public void paintIcon(Component c, Graphics g, int x, int y) {
g.setColor( Color.BLACK );
g.drawLine( x, y+2, x+4, y+2 );
g.drawLine( x+1, y+1, x+3, y+1 );
g.drawLine( x+2, y, x+2, y );
}
};
}
protected Icon createEmptyIcon(){
return new Icon(){
public int getIconHeight() {
return 3;
}
public int getIconWidth() {
return 5;
}
public void paintIcon(Component c, Graphics g, int x, int y) {}
};
}
}