Exibição incompleta no JTable

5 respostas
Z

Olá,

Sei que pode parecer mais um tópico sobre exibição de dados vindo de um determinado BD para um Jtable (e realmente é) mas mesmo futucando os vários posts a respeito não vi nenhum que realmente me esclarecesse diante do meu código. Todos os exemplos vistos antes referem-se a aplicação desta exibição quando se tratando em uma única camada, por isso que trago-lhe meu dilema.

Vamos ao caso: os dados armazenados no vetor estão corretos mas não estão sendo exibidas as linhas no JTable. É mostrada apelas uma, e com o primeiro nome da consulta vinda do BD, quando feita uma consulta sem referências.

Meu código está bem dividido, como manda o figurino (dao, business, view, etc…) e é exatamente nesta passagem/exibição de dados é que estou travado e espero que possam me ajudar neste problema, que está me deixando um pouco mais careca (heheeh)…

Vamos aos códigos dos trechos.

view

private void jButtonBuscarActionPerformed(java.awt.event.ActionEvent evt) {

        DefaultTableModel modeloTabela = (DefaultTableModel) jTable.getModel();

        jTable.setModel(modeloTabela);

        modeloTabela.setRowCount(0);

        jTable.setModel(modeloTabela);

        try {
            String nome = jTextFieldBusca.getText();
            ArquivoMortoBS arquivoMortobs = new ArquivoMortoBS();
            Iterator vectorBusca = arquivoMortobs.consultar(nome);
            if (vectorBusca.hasNext()) {
                ArquivoMorto busca = (ArquivoMorto) vectorBusca.next();
                adicionarLinhaTabela(busca);
            } else {
                JOptionPane.showMessageDialog(null, "Funcionário não encontrado");
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e.getMessage());
        }

    }



public void adicionarLinhaTabela(ArquivoMorto morto) {
        String Nome = morto.getNome();
        String Admissao = morto.getDataAdmissao();
        String Demissao = morto.getDataDemissao();
        String Empresa = morto.getEmpresa();
        String Caixa = morto.getCaixa();

        DefaultTableModel modeloTadela = (DefaultTableModel) jTable.getModel();

        String[][] novaLinha = new String[][]{
            {Nome, Admissao, Demissao, Empresa, Caixa}
        };

        modeloTadela.addRow(novaLinha);

        jTable.setModel(modeloTadela);

        jTable.setValueAt(Nome, jTable.getRowCount() - 1, 0);
        jTable.setValueAt(Admissao, jTable.getRowCount() - 1, 1);
        jTable.setValueAt(Demissao, jTable.getRowCount() - 1, 2);
        jTable.setValueAt(Empresa, jTable.getRowCount() - 1, 3);
        jTable.setValueAt(Caixa, jTable.getRowCount() - 1, 4);
        table1Linhas++;
    }

business

public Iterator consultar(String nome) throws Exception {
        return arqMortoDAO.consultarFuncionario(nome);
    }

DAO

public Iterator consultarFuncionario(String nome) throws Exception {
        Vector busca = new Vector();
        try {
            String sql = null;
            dataBase = new ConexaoDB();
            conexao = dataBase.getConexao();

            if (nome == null || nome.equals("")) {
                sql = "SELECT nome, admissao, demissao, empresa, caixa FROM funcionario order by nome";
            } else {
                sql = "SELECT nome, admissao, demissao, empresa, caixa FROM funcionario where nome like '" + nome + "' order by nome";
            }

            Statement statement = conexao.createStatement();
            resultSet = statement.executeQuery(sql);

            while (resultSet.next()) {

                ArquivoMorto arqMorto = new ArquivoMorto();
                arqMorto.setNome(resultSet.getString("Nome"));
                arqMorto.setDataAdmissao(resultSet.getString("Admissao"));
                arqMorto.setDataDemissao(resultSet.getString("Demissao"));
                arqMorto.setEmpresa(resultSet.getString("Empresa"));
                arqMorto.setCaixa(resultSet.getString("Caixa"));

                busca.add(arqMorto);
            }
            resultSet.close();
        } catch (Exception exception) {
            throw new Exception("erro ao efetuar consulta :" + exception.getMessage());
        } finally {
            dataBase.fecharConexao();
        }
        return busca.iterator();
    }

Fiz vários testes e até onde pude perceber quando chamo o adicionarLinhaTabela ele só está sendo executado uma única vez, por isso só exibe uma linha e pronto. Já pesquisei algo sobre isso e tal mas não encontrei. Ou sou meio lontra e não estou pesquisando direito ou é algo mais do que citei.

Espero que as informações estejam claras e possam ajudar.

Desde já muito obrigado!

5 Respostas

R_chieck

Ola, não sei se sou a pessoa ideal para lhe ajudar mas…:
eu meio que condeno o DefaultTableModel.
pesquise sobre ObjectTableModel, é oque há de mais prático e facil de usar depois de implementado.

Z

Obrigado pela dica. Vou pesquisar a respeito!
:wink:

Z

Dei uma estudada em DefaultTableModel, como recomendado, mas como estou engatinhando em desenvolvimento acabaram surgindo mais dúvidas. :frowning:

ViniGodoy

Não use DefaultTableModel. Você deve estudar como criar seu próprio TableModel.

Sem entender o TableModel completamente, fica impossível usar o JTable.

Além disso, poste dúvidas de inteface gráfica no fórum de interface gráfica. Tive que mover seu tópico.

Z

Opa, obrigado ViniGodoy pela dica e desculpe por postar no fórum errado.

:smiley:

Criado 13 de maio de 2011
Ultima resposta 25 de mai. de 2011
Respostas 5
Participantes 3