package com.revolsys.swing.table;
import javax.swing.Icon;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableModel;
import org.jdesktop.swingx.JXTable;
import org.jdesktop.swingx.table.ColumnFactory;
import org.jdesktop.swingx.table.TableColumnExt;
public class BaseColumnFactory extends ColumnFactory {
private final int sortWidth = ((Icon)UIManager.get("Table.ascendingSortIcon")).getIconWidth();
@Override
protected int calcHeaderWidth(final JXTable table, final TableColumnExt tableColumn) {
int width = super.calcHeaderWidth(table, tableColumn);
width += this.sortWidth;
final TableCellRenderer renderer = getHeaderRenderer(table, tableColumn);
if (renderer instanceof DefaultTableCellRenderer) {
final DefaultTableCellRenderer defaultTableCellRenderer = (DefaultTableCellRenderer)renderer;
final int position = defaultTableCellRenderer.getHorizontalTextPosition();
if (position > 0) {
width += position;
}
}
return width;
}
@Override
public void configureColumnWidths(final JXTable table, final TableColumnExt tableColumn) {
super.configureColumnWidths(table, tableColumn);
final int preferredWidth = tableColumn.getPreferredWidth();
tableColumn.setWidth(preferredWidth);
}
@Override
public void configureTableColumn(final TableModel model, final TableColumnExt tableColumn) {
final AbstractTableModel tableModel = (AbstractTableModel)model;
super.configureTableColumn(model, tableColumn);
int columnIndex = tableColumn.getModelIndex();
final BaseJTable table = tableModel.getTable();
columnIndex = table.convertColumnIndexToModel(columnIndex);
final Object prototypeValue = tableModel.getPrototypeValue(columnIndex);
tableColumn.setPrototypeValue(prototypeValue);
}
}