Comumente quando damos um duplo-clique na entre-linha do cabeçalho de uma tabela ela se ajsuta da melhor maneira baseando-se no tamanho do maior registro daquela coluna.
a pergunta é:
como consigo esse efeito em uma JTable? já existe um método pronto ou preciso implementar essa funcionalidade?
Tópico antigo, mas se alguér chegar até aqui, fica a dica.
public void tableColumnAutoSize(JTable table) {
table.setSelectionMode(JTable.AUTO_RESIZE_OFF);
int[] largestString = new int[table.getColumnCount()];
FontMetrics fm = table.getFontMetrics(table.getFont());
// Inicializa todos os campos com tamanho do título da coluna
for (int i=0;i<largestString.length;i++)
largestString[i] = fm.stringWidth(table.getColumnModel().getColumn(i).getHeaderValue();
for (int i=0; i<table.getRowCount(); i++) {
for (int j=0;j<largestString.length;j++) {
try {
Object sourceValue = table.getValueAt(i, j);
if (sourceValue == null)
continue;
String value = sourceValue.toString();
int valueSize = fm.stringWidth(value);
if (valueSize > largestString[j]) {
largestString[j] = valueSize;
}
} catch (IllegalArgumentException ex) {
Logger.getLogger(OldStdTableModel.class.getName()).log(Level.SEVERE, null, ex);
return;
}
}
}
// Aplica as dimenções encontradas na tabela. Soma 20 pois testes mostraram que o campo sempre fica um pouco menor
for (int k=0;k<fieldConfig.size();k++)
table.getColumnModel().getColumn(k).setPreferredWidth(largestString[k] + 20);
table.repaint();
}