Oi, eu faço assim:
//Define a largura das colunas 0 e 2 da Tabela
TableColumn tc = null;
tc = SUATABELA.getColumnModel().getColumn( 0 );
tc.setPreferredWidth( 55 );
tc.setMaxWidth( 55 );
tc.setMinWidth( 55 );
tc = SUATABELA.getColumnModel().getColumn( 2 );
tc.setPreferredWidth( 70 );
tc.setMaxWidth( 70 );
tc.setMinWidth( 70 );
Nesse caso eu tenho 3 colunas, então defino o tamanho da primeira e da última, consequentemente a do meio (coluna 2) fica com o espaço que sobra.
Os comandos setMaxWidth e setMinWidth iguais evitam que o usuário possa deslizar a divisória das colunas mudando a sua largura, se além disso você ainda queira que suas colunas não possam ser trocadas de lugar pelo usuário (arrastando) você deve usar o método:
SUATABELA.getTableHeader().setReorderingAllowed(false);
Acho que isso pode ajudar, qualquer dúvida é só postar.
[]s,