import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.UIManager;
import javax.swing.plaf.basic.BasicTableHeaderUI;
import javax.swing.table.JTableHeader;
import org.jdesktop.swingx.JXTable;
public class MappingTableHeaderUI extends BasicTableHeaderUI {
private JTableHeader header;
private MappingTableModel tableModel;
private JXTable mappingTable;
public MappingTableHeaderUI(JXTable table){
this.tableModel =(MappingTableModel) table.getModel();
mappingTable = table;
mappingTable.getTableHeader().setPreferredSize(new Dimension(10000, 30));
}
public void paint(Graphics g, JComponent c) {
header = (JTableHeader) c;
JLabel label=getLabel("");
for (int i = 0; i< tableModel.getSingleColumnCount(); i++){
String columnName = tableModel.getColumnName(i);
label = getLabel(columnName);
rendererPane.paintComponent(g, label, header, getX(i), 0, getWidth(i), 30, true);
}
for(int j = 0 ;j < tableModel.getGroupColumnCounts(); j++){
String groupcolumnName = tableModel.getGroupColumnName(j);
label = getLabel(groupcolumnName);
int groupwidth = 0;
for(int k = 0 ;k < tableModel.getGroupColumnSubCounts(j) ; k++){
int index = tableModel.changeToTotalColumnIndex(j,k);
String columnName = tableModel.getColumnName(index);
label = getLabel(columnName);
rendererPane.paintComponent(g, label, header, getX(index), 15, getWidth(index), 15, true);
groupwidth +=getWidth(index);
}
int groupindex = tableModel.changeToTotalColumnIndex(j,0);
rendererPane.paintComponent(g, label, header, getX(groupindex), 0, groupwidth, 15, true);
}
}
private int getX(int column){
int x=0;
for(int i=0;i<column;i++){
// if(i < tableModel.getSingleColumnCount()){
// x+=tableModel.getSingleColumnWidth(i);
// }else{
x+=header.getColumnModel().getColumn(i).getWidth();
// }
}
return x;
}
private int getWidth(int column){
// if(column < tableModel.getSingleColumnCount()){
// return tableModel.getSingleColumnWidth(column);
// }
return header.getColumnModel().getColumn(column).getWidth();
}
private JLabel getLabel(String text){
JLabel label = new JLabel(text, JLabel.CENTER);
label.setBorder(UIManager.getBorder("TableHeader.cellBorder"));
return label;
}
}