Inserir dados em um JTable

Prezados amigos, sou iniciante no mundo java e gostaria de uma ajuda para inserir alguns campos de uma tabela em um jTable. Fazendo algumas pesquisas tentei inserir utilizando vector, object e array, mas ainda não consegui entender porque os dados não são mostrados.

O codigo que estou utilizando é o seguinte:

        ResultSet rsLupa = null;
        Cliente cliente = new Cliente();
        rsLupa = cliente.lupaCliente();//Executa o comando de selecao e seta as informações da pesquisa
        //Object[] linha = new Object[4];//cria array de objetos
        DefaultTableModel modelo = new DefaultTableModel();//cria modelo para tabela de consulta
        //Vector linha = new Vector();//cria vetor de objetos
        try {
            while (rsLupa.next()) {
                //int cont = 0;
                int cod = rsLupa.getInt("cod");
                String razSocial = rsLupa.getString("razSocial");
                String fantasia = rsLupa.getString("fantasia");
                String cnpj = rsLupa.getString("cnpj");
                String cpf = rsLupa.getString("cpf");
                if (cnpj == null) {
                    //Atribuir valor com CPF
                    //linha[cont  ] = cod;
                    //linha[cont++] = razSocial;
                    //linha[cont++] = fantasia;
                    //linha[cont++] = cpf;
                    modelo.addRow(new Object[]{cod,razSocial,fantasia,cpf});
                   // linha.addElement(new Object[]{cod,razSocial,fantasia,cpf});
                } else {
                    //Atribuir valor com CNPJ
                    //linha[cont  ] = cod;
                    //linha[cont++] = razSocial;
                    //linha[cont++] = fantasia;
                    //linha[cont++] = cnpj;
                    modelo.addRow(new Object[]{cod,razSocial,fantasia,cnpj});
                   // linha.addElement(new Object[]{cod,razSocial,fantasia,cnpj});
                }
                //System.out.println();
                //modelo.addRow(linha);//adiciona cada linha ao modelo da tabela
                //jTable1.addColumn(null);
                //modelo.addRow(new Object[]{cod,razSocial,fantasia,cnpj});
            }
            //System.out.println(modelo);
            //modelo.addRow(linha);
            jTable1.setModel(modelo);//adiciona o modelo a tabela criada para consulta
            //jTable1.setVisible(true);
        } catch (SQLException ex) {
            Logger.getLogger(TelaLupaCliente.class.getName()).log(Level.SEVERE, null, ex);
        }

O estranho do codigo é que apesar de não mostrar nenhum erro, ele não monta o jTable com as informações. Imprimindo as variáveis (cod,razSocial,fantasia, etc) é possivel verificar que elas possuem as informações conforme os dados existentes no banco, porém quando mando imprimir o model o Java mostra uma informação parecendo a referencia de memoria do objeto (javax.swing.table.DefaultTableModel@5bd86632).

Como inserir as informações da tabela no jTable?

Primeiro de tudo acho que seria bom você dar uma pesquisada sobre DefaultTableModel aqui no GUJ e veja como ele é querido por todos (rsrs)

http://www.guj.com.br/java/149861-recuperar-id-de-jtable/2#813171
http://www.guj.com.br/java/205507-por-que-o-defaulttablemodel-e-tao-ruim
http://www.guj.com.br/java/231928-morte-definitiva-ao-default-table-model
enfim… dê uma olhada sobre isso, tente construir o seu próprio TableModel ou use algum citado nos links, como o ObjectTableModel.

Prezado erico_kl, primeiro gostaria de agradecer pela atenção.

Sobre as sugestões e links enviados, verifiquei e pode ficar tranquilo que não vou trabalhar com o DefaultTableModel, porém como sou iniciante, mesmo com tanto material não consegui ainda identificar como irei resolver o problema do jTable, uma vez que tenho as informações mas não consigo inseri-las na tabela.

Falando um pouco mais do projeto, estou utilizando o swing para montar as tabelas de forma grafica e separei em um pacote todas as telas e em outro os acessos ao banco. Minha ideia era na classe onde monta a janela, utilizar o evento formWindowOpened para carregar os dados, então eu crio um ResultSet que busca as informações de outro que está no pacote que acessa o banco.

Nesse ambiente, como eu utilizo as ferramentas do TableModel, consegue me ajudar?

[quote=paulorborges]Prezado erico_kl, primeiro gostaria de agradecer pela atenção.

Sobre as sugestões e links enviados, verifiquei e pode ficar tranquilo que não vou trabalhar com o DefaultTableModel, porém como sou iniciante, mesmo com tanto material não consegui ainda identificar como irei resolver o problema do jTable, uma vez que tenho as informações mas não consigo inseri-las na tabela.

Falando um pouco mais do projeto, estou utilizando o swing para montar as tabelas de forma grafica e separei em um pacote todas as telas e em outro os acessos ao banco. Minha ideia era na classe onde monta a janela, utilizar o evento formWindowOpened para carregar os dados, então eu crio um ResultSet que busca as informações de outro que está no pacote que acessa o banco.

Nesse ambiente, como eu utilizo as ferramentas do TableModel, consegue me ajudar?[/quote]
bom, no caso da tabela o que eu faria seria usar ObjectTableModel. Nela você trabalha somente com objetos (nada de addRow passando um vetor de Object :shock: ). Aí basicamente vc usa a sua bean (não importa como você vai buscar esses objetos, a parte visual deve ser totalmente desacoplada) e adiciona os objetos no model que está setado na tabela. Ou seja, você não vai adicionar objetos na tabela, e sim no model. A tabela é somente a apresentação visual dos dados, mas quem controla e gerencia tudo o que acontece com os esses dados é o model.

Realmente o ObjectTableModel ficou bem mais pratico do que criar o Jtable na “unha” como eu estava fazendo.

Valeu a dica erico_kl.

para mostrar é necessário primeiro setar as colunas, depois preencher o JTable

        modelo.addColumn("razSocial");
        modelo.addColumn("Fantasia");
        modelo.addColumn("CNPJ");
        modelo.addColumn("CPF");
        JTable.setModel(modelo);

agora é só preencher o DefaultTableModel com

modelo.addRow(new String [] { aqui seus dados });

Prezados, tinha percebido que o problema está relacionado a dica do morcinek, onde não basta somente incluir as linhas da tabela. Imaginei que não fosse necessário uma vez que eu configurei diretamente no objeto os nomes da coluna mas para funcionar tive realmente que setá-las novamente, aparentemente o objeto depende das duas implementações para rodar (coluna e linha).

Porém vi tantos comentarios sobre o DefaultTableModel que agora estou preocupado em utilizá-lo. Estou vendo a possbilidade de criar uma classe para o TableModel e trabalhar apartir dela.

Falando do DefaultTableModel, haveria alguma forma de transformar a informacao da coluna cod em link? Estou fazendo uma tela de consulta e gostaria de clicar na informação e ela automaticamente fechar a janela e carregar os dados na tela anterior (tela do cadastro).