Al leer el comentario de Kleopatra (la segunda vez que sugirió echar un vistazo a javax.swing.JXTable , y ahora lamento no haberlo visto la primera vez :)) te sugiero que sigas el enlace
Tuve esta solución para el mismo problema: (pero le sugiero que siga el enlace de arriba) Al cambiar el tamaño de la tabla, escale el ancho de la columna de la tabla al ancho total de la tabla actual. para hacer esto, uso una matriz global de entradas para los anchos de columna (relativos)):
private int[] columnWidths=null;
Utilizo esta función para establecer los anchos de columna de la tabla:
public void setColumnWidths(int[] widths){
int nrCols=table.getModel().getColumnCount();
if(nrCols==0||widths==null){
return;
}
this.columnWidths=widths.clone();
//current width of the table:
int totalWidth=table.getWidth();
int totalWidthRequested=0;
int nrRequestedWidths=columnWidths.length;
int defaultWidth=(int)Math.floor((double)totalWidth/(double)nrCols);
for(int col=0;col<nrCols;col++){
int width = 0;
if(columnWidths.length>col){
width=columnWidths[col];
}
totalWidthRequested+=width;
}
//Note: for the not defined columns: use the defaultWidth
if(nrRequestedWidths<nrCols){
log.fine("Setting column widths: nr of columns do not match column widths requested");
totalWidthRequested+=((nrCols-nrRequestedWidths)*defaultWidth);
}
//calculate the scale for the column width
double factor=(double)totalWidth/(double)totalWidthRequested;
for(int col=0;col<nrCols;col++){
int width = defaultWidth;
if(columnWidths.length>col){
//scale the requested width to the current table width
width=(int)Math.floor(factor*(double)columnWidths[col]);
}
table.getColumnModel().getColumn(col).setPreferredWidth(width);
table.getColumnModel().getColumn(col).setWidth(width);
}
}
Al configurar los datos, llamo:
setColumnWidths(this.columnWidths);
y al cambiar, llamo al ComponentListener establecido en el padre de la tabla (en mi caso, el JScrollPane que es el contenedor de mi tabla):
public void componentResized(ComponentEvent componentEvent) {
this.setColumnWidths(this.columnWidths);
}
tenga en cuenta que la tabla JTable también es global:
private JTable table;
Y aquí configuro el oyente:
scrollPane=new JScrollPane(table);
scrollPane.addComponentListener(this);