I need to get an appropriate table size according to a text in a header. It contains abbreviations of czech names of days like: \"Po\", \"Út\", \"St\", atc. but instead of t
This is fantastic code to auto-fit your header and cell content in the JTable:
jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF );
for (int column = 0; column < jTable1.getColumnCount(); column++){
TableColumn tableColumn = jTable1.getColumnModel().getColumn(column);
int preferredWidth = tableColumn.getMinWidth();
int maxWidth = 0;
TableCellRenderer rend = jTable1.getTableHeader().getDefaultRenderer();
TableCellRenderer rendCol = tableColumn.getHeaderRenderer();
if (rendCol == null) rendCol = rend;
Component header = rendCol.getTableCellRendererComponent(jTable1, tableColumn.getHeaderValue(), false, false, 0, column);
maxWidth = header.getPreferredSize().width;
System.out.println("maxWidth :"+maxWidth);
for (int row = 0; row < jTable1.getRowCount(); row++){
TableCellRenderer cellRenderer = jTable1.getCellRenderer(row, column);
Component c = jTable1.prepareRenderer(cellRenderer, row, column);
int width = c.getPreferredSize().width + jTable1.getIntercellSpacing().width;
preferredWidth = Math.max(preferredWidth, width);
System.out.println("preferredWidth :"+preferredWidth);
System.out.println("Width :"+width);
// We've exceeded the maximum width, no need to check other rows
if (preferredWidth <= maxWidth){
preferredWidth = maxWidth;
break;
}
}
tableColumn.setPreferredWidth(preferredWidth);
}