Dimensionando as colunas de um JTable

Veja nesta dica como dimensionar a largura das colunas para que todo o conteúdo seja apresentado.

Dimensionando as colunas de um JTable

Este exemplo demonstra como ajustar a largura de uma coluna para apresentar a largura correta para todos os cabeçalhos da coluna e dos dados de cada coluna.

int rows = 3;
int cols = 3;
JTable table = new JTable(rows, cols);
// Desabilita a possibilidade de resize
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
// Adiciona dados aqui    
int vColIndex = 1;
int margin = 2;
packColumn(table, vColIndex, margin);
public void packColumns(JTable table, int margin) {
for (int c=0; c<table.getColumnCount(); c++) {
          packColumn(table, c, 2);
}
}
// Ajusta a largura preferida da coluna visível especificada pelo vColIndex.
// A coluna será larga o bastante para mostrar o cabeçalho da coluna e a
// célula de maior conteúdo.
public void packColumn(JTable table, int vColIndex, int margin) {
TableModel model = table.getModel();
DefaultTableColumnModel colModel = (DefaultTableColumnModel)table.
getColumnModel();
TableColumn col = colModel.getColumn(vColIndex);
int width = 0;
// Obtém a largura do cabeçalho da coluna
TableCellRenderer renderer = col.getHeaderRenderer();
if (renderer == null) {
renderer = table.getTableHeader().getDefaultRenderer();
}
Component comp = renderer.getTableCellRendererComponent(
table, col.getHeaderValue(), false, false, 0, 0);
width = comp.getPreferredSize().width;
// Obtém a largura maxima da coluna de dados
for (int r=0; r<table.getRowCount(); r++) {
renderer = table.getCellRenderer(r, vColIndex);
comp = renderer.getTableCellRendererComponent(
table, table.getValueAt(r, vColIndex), false, false, r,
vColIndex);
width = Math.max(width, comp.getPreferredSize().width);
}
width += 2*margin;
// Configura a largura
col.setPreferredWidth(width);
}

Artigos relacionados