[RESOLVIDO] Tamanho da coluna do JTable (meu código não tá funcionando)

5 respostas
filiperangel

Tudo certo gente? Impementei um método que trabalho com meu Jtable, preenchendo e organizando as colunas, o problema é que as colunas não ficam com o tamanho que eu coloco. Analisem meu código por favor, pra ver o que eu estou deixando de fazer… Obrigado.

//Método responsável por preencher o jTable da tela de Categoria
    public int categoria(JTable table, String valor, String tipo)
    {
        //Instanciando um ResultSet com o retorno do método selectCategoria
        ResultSet rs = servico.selectCategoria(valor, tipo);
        //Definindo a seleção de apenas uma linha no Jtable
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        //Declarando uma String com o nome das Colunas utilizadas no Jtable
        String[] nomeColunasTabela = {"Código", "Nome"};
        //Instanciando um modelo de Tabela passando como parâmetro um Object vazio e o nome das colunas
        DefaultTableModel aModel = new DefaultTableModel(new Object[] []{ }, nomeColunasTabela) 
        {
            //Sobrescrevendo o método isCellEditable para que o usuário não possa alterar as células do Jtable
            public boolean isCellEditable(int row, int col) 
            {  
                return false;  
            }
        };
        //***** Verificar se é necessário isso aki
        aModel.setColumnIdentifiers (nomeColunasTabela);
        //Limpando todas as linhas do jTable
        aModel.setNumRows(0);
        //Criando uma interface para trabalhar com as células do jTable
        DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
        //Definindo o alinhamento das células do modelo como Centralizado
        renderer.setHorizontalAlignment(SwingConstants.CENTER);
        //Instanciando um modelo para colunas e pegando o modelo do jTable
        TableColumnModel modelocoluna = table.getColumnModel();
        //Definindo o modelo da coluna 0 do jTable
        modelocoluna.getColumn(0).setCellRenderer(renderer);
        //Definindo o tamanho da coluna 0 do jTable
        modelocoluna.getColumn(0).setPreferredWidth(60);
        //***** Esqueci o que é ....
        Object[] retorno = new Object[2];
        //Colocando o modelo no Jtable mesmo sem os dados, assim os nomes 
        // das colunas serão exibidos mesmo sem ter dado algum.
        table.setModel(aModel);
        //table.getColumn(1).setPreferredWidth(25);
        try
        {
            if(rs == null || rs.next() == false )
            {
                return 0;
            }
            else
            {
                do
                {
                    //concatena o código retorna com zeros
                    String zeros = "0000" + rs.getString(1);
                    //atribuindo  o retorno do banco para o objeto retorno
                    retorno[0] = zeros.substring(zeros.length() - 4);
                    retorno[1] = rs.getString(2);
                    //Adicionando uma nova linha no modelo de jTable com os valores contidos em retorno
                    aModel.addRow(retorno);
                }
               while(rs.next());
                //Definindo o modelo para o jTable passando todas as modificações feitas no modelo
                table.setModel(aModel);
                rs.close();
                return 1;
            }
        }
       catch(SQLException ex)
       {
           
       }
       return 1;
    }

5 Respostas

P

Para cada coluna que você deseja fixar o tamanho, chame

minhaColuna.setResizable(false);

Caso contrário, a tabela vai distribuir o tamanho disponível de forma uniforme para todas as colunas.

Ratao

Para fixar o tamanho das colunas, tente assim:

//tamanhos de colunas
seuJTable.getColumnModel().getColumn(numero_da_coluna).setPreferredWidth(tamanho_desejado);
seuJTable.getColumnModel().getColumn(numero_da_coluna).setResizable(false);
filiperangel

Agradeço ao Pango e ao Ratão pela ajuda, só que o código ainda não funcionou.

Peço desculpa a vcs pela demora na resposta, mais estive com alguns problemas…

Segue o código com a alteração que vcs me passaram, se tiverem mais alguma dica eu agradeço e muito!

//Método responsável por preencher o jTable da tela de Categoria
    public int categoria(JTable table, String valor, String tipo)
    {
        //Instanciando um ResultSet com o retorno do método selectCategoria
        ResultSet rs = servico.selectCategoria(valor, tipo);
        //Definindo a seleção de apenas uma linha no Jtable
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        //Declarando uma String com o nome das Colunas utilizadas no Jtable
        String[] nomeColunasTabela = {"Código", "Nome"};
        //Instanciando um modelo de Tabela passando como parâmetro um Object vazio e o nome das colunas
        DefaultTableModel aModel = new DefaultTableModel(new Object[] []{ }, nomeColunasTabela) 
        {
            //Sobrescrevendo o método isCellEditable para que o usuário não possa alterar as células do Jtable
            public boolean isCellEditable(int row, int col) 
            {  
                return false;  
            }
        };
        //***** Verificar se é necessário isso aki
        aModel.setColumnIdentifiers (nomeColunasTabela);
        //Limpando todas as linhas do jTable
        aModel.setNumRows(0);
        //Criando uma interface para trabalhar com as células do jTable
        DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
        //Definindo o alinhamento das células do modelo como Centralizado
        renderer.setHorizontalAlignment(SwingConstants.CENTER);
       
               
        table.getColumnModel().getColumn(0).setPreferredWidth(20);
        table.getColumnModel().getColumn(0).setResizable(false);
        table.getColumnModel().getColumn(1).setPreferredWidth(9);
        table.getColumnModel().getColumn(1).setResizable(false);
        
        //Instanciando um modelo para colunas e pegando o modelo do jTable
        TableColumnModel modelocoluna = table.getColumnModel();
        modelocoluna.getColumn(0).setCellRenderer(renderer);

        
        //***** Esqueci o que é ....
        Object[] retorno = new Object[2];
       // table.setColumnModel(modelocoluna);
        //Colocando o modelo no Jtable mesmo sem os dados, assim os nomes 
        // das colunas serão exibidos mesmo sem ter dado algum.
        table.setModel(aModel);
        //table.getColumn(1).setPreferredWidth(25);
        
        try
        {
            if(rs == null || rs.next() == false )
            {
                return 0;
            }
            else
            {
                do
                {
                    //concatena o código retorna com zeros
                    String zeros = "0000" + rs.getString(1);
                    //atribuindo  o retorno do banco para o objeto retorno
                    retorno[0] = zeros.substring(zeros.length() - 4);
                    retorno[1] = rs.getString(2);
                    //Adicionando uma nova linha no modelo de jTable com os valores contidos em retorno
                    aModel.addRow(retorno);
                }
               while(rs.next());
                //Definindo o modelo para o jTable passando todas as modificações feitas no modelo
                table.setModel(aModel);
                rs.close();
                return 1;
            }
        }
       catch(SQLException ex)
       {
           
       }
       return 1;
    }
filiperangel

Só dando um UP no tópico. Alguém me ajuda plis…

vlw!

filiperangel

Bom, depois de muito tempo eu descobri como resolver meu problema.

Seguinte, eu tenho um DefaultTableModel que alimento ele com os dados de cada linha e jogo pro JTable.

O que eu estava fazendo: acertando o tamanho da coluna antes de alimentar o JTAble então, quando alimnetava as colunas eram reordenadas automaticamente.

O que eu fiz: apenas acertei o tamanho das colunas depois de alimentar o JTable.

Segue o código.

public int categoria(JTable table, String valor, String tipo)
    {   //table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        //Instanciando um ResultSet com o retorno do método selectCategoria
        ResultSet rs = servico.selectCategoria(valor, tipo);
        //Definindo a seleção de apenas uma linha no Jtable
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        //Declarando uma String com o nome das Colunas utilizadas no Jtable
        String[] nomeColunasTabela = {"Código", "Nome"};
        //Instanciando um modelo de Tabela passando como parâmetro um Object vazio e o nome das colunas
        DefaultTableModel aModel = new DefaultTableModel(new Object[] []{ }, nomeColunasTabela) 
        {
            //Sobrescrevendo o método isCellEditable para que o usuário não possa alterar as células do Jtable
            @Override
            public boolean isCellEditable(int row, int col) 
            {  
                return false;  
            }
        };
        //***** Verificar se é necessário isso aki
        aModel.setColumnIdentifiers (nomeColunasTabela);
        //Limpando todas as linhas do jTable
        aModel.setNumRows(0);
        //***** Esqueci o que é ....
        Object[] retorno = new Object[2];
        try
        {
            if(rs == null || rs.next() == false )
            {
                return 0;
            }
            else
            {
                do
                {
                    //concatena o código retorna com zeros
                    String zeros = "0000" + rs.getString(1);
                    //atribuindo  o retorno do banco para o objeto retorno
                    retorno[0] = zeros.substring(zeros.length() - 4);
                    retorno[1] = rs.getString(2);
                    //Adicionando uma nova linha no modelo de jTable com os valores contidos em retorno
                    aModel.addRow(retorno);
                }
               while(rs.next());
                //Definindo o modelo para o jTable passando todas as modificações feitas no modelo
                table.setModel(aModel);
                //definindo tamanho da coluna 0 do JTable
                table.getColumnModel().getColumn(0).setPreferredWidth(50);
                //definindo tamanho da coluna 1 do JTable
                table.getColumnModel().getColumn(1).setPreferredWidth(490);
                //Criando uma interface para trabalhar com as células do jTable
                DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
                //Definindo o alinhamento das células do modelo como Centralizado
                renderer.setHorizontalAlignment(SwingConstants.CENTER);
                //setando a interface modificada nas células da coluna 0
                table.getColumnModel().getColumn(0).setCellRenderer(renderer);
                rs.close();
                return 1;
            }
        }
       catch(SQLException ex)
       {
           
       }
       return 1;
    }

Obrigado a todos que tentaram me ajudar…

Criado 2 de novembro de 2007
Ultima resposta 24 de jan. de 2008
Respostas 5
Participantes 3