package com.revolsys.swing.table;
import java.awt.Component;
import javax.swing.JTable;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
import com.revolsys.swing.parallel.Invoke;
public class JTableUtil {
public static void sizeColumnsToFit(final JTable table) {
Invoke.later(() -> {
final JTableHeader tableHeader = table.getTableHeader();
final TableColumnModel columnModel = table.getColumnModel();
for (int columnIndex = 0; columnIndex < table.getColumnCount(); columnIndex++) {
final TableColumn column = columnModel.getColumn(columnIndex);
final String columnName = table.getColumnName(columnIndex);
final TableCellRenderer headerRenderer = tableHeader.getDefaultRenderer();
final int headerWidth = headerRenderer
.getTableCellRendererComponent(table, columnName, false, false, 0, 0)
.getPreferredSize().width;
int maxwidth = headerWidth + 20;
for (int rowIndex = 0; rowIndex < table.getRowCount(); rowIndex++) {
final TableCellRenderer cellRenderer = table.getCellRenderer(rowIndex, columnIndex);
final Object value = table.getValueAt(rowIndex, columnIndex);
final Component component = cellRenderer.getTableCellRendererComponent(table, value,
false, false, rowIndex, columnIndex);
maxwidth = Math.max(component.getPreferredSize().width, maxwidth);
}
column.setPreferredWidth(maxwidth + 5);
}
});
}
}