[RESOLVIDO] Problemas de especificar largura das colunas de um JTable com AUTO_RESIZE_OFF

Pessoal ,

Bom dia a todos !

Estou tendo problemas para que minhas colunas colunas de um JTable tenham um tamanho especificado por mim.
Quando especifico as colunas no DefaultTableModel e crio o JTable com o modelo e uso tabela.getColumnModel().getColumn(indice).setPreferredWidth(50); em cada coluna que criei no modelo , a largura de cada coluna fica do modo que especifiquei.
Mas se depois em tempo de execução adiciono mais coluna no modelo ( com o metodo adicionaColuna ) e uso o tabela.getColumnModel().getColumn(indice).setPreferredWidth(50); nesta nova coluna todas as colunas ficam pequenas sem obedecer os valores que havia especificado:

Segue imagens em anexo da minha tabela

Segue o fonte abaixo:


import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.Box;
import javax.swing.JScrollPane;
import java.awt.Dimension;
import javax.swing.JPanel;

public class Tabela {

String tipo_tabela;
Box box_tabela;
//JScrollPane scroll;
// Object[] colunas;
// Object[][] dados;
JTable tabela;
// JPanel panel;
DefaultTableModel modelo;
int indice_coluna;

	public void init(String tipo) {
	
		tipo_tabela = tipo;
		box_tabela = Box.createHorizontalBox();
		indice_coluna = 4;
		
		criaTabelaCadastroNumerico();

				
		
		
	} // fim do metodo init
	
	
	private void criaTabelaCadastroNumerico() {
	
		// panel = new JPanel();
		Object[] colunas = {"Login","Cod", "Codinome", "Nome","Skill",};

		// Object[][] dados  = { {"99999", "12345678900","Smith da Silva Sauro Santos de Souza Cordeiro","21-136" } };

		modelo = new DefaultTableModel(colunas,0) {
			
			 public boolean isCellEditable(int rowIndex, int mColIndex){  
			 	 return false;  
			 }     
		
		};
		
		//modelo.addColumn("Skill rrrRetorno");

		tabela = new JTable(modelo);
		tabela.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
		
		tabela.getColumnModel().getColumn(0).setPreferredWidth(50);
		tabela.getColumnModel().getColumn(1).setPreferredWidth(100);
		tabela.getColumnModel().getColumn(2).setPreferredWidth(300);
		tabela.getColumnModel().getColumn(3).setPreferredWidth(440);
		tabela.getColumnModel().getColumn(4).setPreferredWidth(100);
		
		box_tabela.add( new JScrollPane(tabela));
		//scroll = new JScrollPane(panel);
		//modelo.addColumn("Skill Retorno");
		adicionaLinha("87664","12345678900","Rafael Teixeira","Rafael Costa Teixeira","21-136","21");
		setVisivel(false);
		
	} // fim do metodo CriaTabelaCadastroNumerico
	public void adicionaLinha(String login,String cod,String cod_nome,String nome,String skill,String skill1) {
	
		 modelo.addRow( new String [] {login,cod,cod_nome,nome,skill,skill1} ); 

		
	}
	public void adicionaColuna(String coluna) {
		tabela.getColumnModel().getColumn(indice_coluna).setPreferredWidth(100);
		
		modelo.addColumn(coluna);
		indice_coluna++;
	}
	public void setVisivel(Boolean opcao) {
	
		box_tabela.setVisible(opcao);
	}
	
	public Box get() {
	
		return box_tabela;
		// return scroll;
	}
	
	
} // fim da classe tabela

Por favor alguem poderia me dar ajudar ?




Pessoal ,

Depois de quase um dia tentando , consegui fazer o que queria , pelo que entendi a cada adição de uma nova coluna deve se usar o setPreferredWidth em todas as colunas da tabela.
Segue o código com a alteração abaixo para quem tambem estiver com essa mesma duvida:


import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.Box;
import javax.swing.JScrollPane;
import java.awt.Dimension;
import javax.swing.JPanel;

public class Tabela {

String tipo_tabela;
Box box_tabela;
//JScrollPane scroll;
// Object[] colunas;
// Object[][] dados;
JTable tabela;
// JPanel panel;
DefaultTableModel modelo;
int indice_coluna;

	public void init(String tipo) {
	
		tipo_tabela = tipo;
		box_tabela = Box.createHorizontalBox();
		indice_coluna = 0;
		
		criaTabelaCadastroNumerico();

				
		
		
	} // fim do metodo init
	
	
	private void criaTabelaCadastroNumerico() {
	
		// panel = new JPanel();
		Object[] colunas = {"Login","Cod", "Codinome", "Nome","Skill",};

		// Object[][] dados  = { {"99999", "12345678900","Smith da Silva Sauro Santos de Souza Cordeiro","21-136" } };

		modelo = new DefaultTableModel(0,0) {
			
			 public boolean isCellEditable(int rowIndex, int mColIndex){  
			 	 return false;  
			 }     
		
		};
		//modelo.addColumn("Skill rrrRetorno");

		tabela = new JTable(modelo);
		tabela.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
		
		adicionaColuna("Login");
		adicionaColuna("Cod");
		adicionaColuna("Codinome");
		adicionaColuna("Nome");
		adicionaColuna("Skill");
		ajustaTamanhoColunas();
	/*	
		tabela.getColumnModel().getColumn(0).setPreferredWidth(50);
		tabela.getColumnModel().getColumn(1).setPreferredWidth(100);
		tabela.getColumnModel().getColumn(2).setPreferredWidth(300);
		tabela.getColumnModel().getColumn(3).setPreferredWidth(440);
		tabela.getColumnModel().getColumn(4).setPreferredWidth(100);
	*/	
		box_tabela.add( new JScrollPane(tabela));
		//scroll = new JScrollPane(panel);
		//modelo.addColumn("Skill Retorno");
		adicionaLinha("87664","12345678900","Rafael Teixeira","Rafael Costa Teixeira","21-136","21");
		setVisivel(false);
		
	} // fim do metodo CriaTabelaCadastroNumerico
	public void adicionaLinha(String login,String cod,String cod_nome,String nome,String skill,String skill1) {
	
		 modelo.addRow( new String [] {login,cod,cod_nome,nome,skill,skill1} ); 

		
	}
	
	public void ajustaTamanhoColunas(){
		
		tabela.getColumnModel().getColumn(0).setPreferredWidth(50);
		tabela.getColumnModel().getColumn(1).setPreferredWidth(100);
		tabela.getColumnModel().getColumn(2).setPreferredWidth(250);
		tabela.getColumnModel().getColumn(3).setPreferredWidth(350);
		tabela.getColumnModel().getColumn(4).setPreferredWidth(100);
		//tabela.getColumnModel().getColumn(5).setPreferredWidth(100);
		for(int i=4;i < tabela.getColumnCount();i++) {
			
			tabela.getColumnModel().getColumn(i).setPreferredWidth(150);
	
		}
	}
	
	public void adicionaColuna(String coluna) {
		
		modelo.addColumn(coluna);
		//tabela.getColumnModel().getColumn(indice_coluna).setPreferredWidth(500);
		if(indice_coluna > 4) {
		ajustaTamanhoColunas();
		}
		indice_coluna++;
	}
	public void setVisivel(Boolean opcao) {
	
		box_tabela.setVisible(opcao);
	}
	
	public Box get() {
	
		return box_tabela;
		// return scroll;
	}
	
	
} // fim da classe tabela