Problema para preencher uma JTable

4 respostas
fernando_psan

Bom Dia Pessoal,

Sou novato por aqui e também com o Java. Realizei algumas buscas pelo site e no fórum mas não encontrei nenhuma resposta definitiva para minha dúvida.
É o seguinte, estou utilizando o NetBeans 5.0 e estou tentando passar uma consulta para uma JTable, quando chega ao fim do programa ela não carrega, veriquei a query e esta trazendo corretamente os valores, abaixo segue meu código.
Existe alguma configuração extra que se deve fazer no NetBeans para se usar o componente JTable??

Obs.: Esse código tirei de um livro.

Obrigado.

public void exibeDados(ResultSet rs) throws SQLException{

//Posiciona  no primeiro registro

boolean registros = rs.next();

if (!registros){

JOptionPane.showMessageDialog(this,A Tabela esta vazia!);

setTitle(Não  registros para exibir.);

return;

}

setTitle(Consulta);

Vector colunas = new Vector();

Vector linhas = new Vector();

try{

//Montando o cabeçalho das colunas

ResultSetMetaData rsmd = rs.getMetaData();

for (int i = 1; i <= rsmd.getColumnCount(); ++i){

colunas.addElement(trataNomeColuna(rsmd.getColumnName(i)));

}

do{

linhas.addElement(recuperaDados(rs,rsmd));

}while(rs.next());
//Exibindo os dados
    resultTable = new JTable(linhas,colunas);
    JScrollPane scroller = new JScrollPane(resultTable);
    getContentPane().add(scroller,BorderLayout.CENTER);
    validate();
}
catch (SQLException sqlex){
    sqlex.printStackTrace();
  }
}

private Vector recuperaDados(ResultSet rs, ResultSetMetaData rsmd)
throws SQLException {
    Vector dadosTabela = new Vector();
    for (int i = 1; i <= rsmd.getColumnCount(); ++i){
        dadosTabela.addElement(rs.getString(i));
        }
    return dadosTabela;
}

private String trataNomeColuna(String str){
    String result = "";
    
    String[] nomeColuna = new String[4];
        nomeColuna[0] = "codigo";
        nomeColuna[1] = "nome";
        nomeColuna[2] = "altura";
        nomeColuna[3] = "idade";
        
   String[] nomeTratado = new String[4];
        nomeTratado[0] = "Código";
        nomeTratado[1] = "Nome";
        nomeTratado[2] = "Altura";
        nomeTratado[3] = "Idade";
        
   for (int i = 0; i <= nomeColuna.length; ++i){
            if (str.trim().equals(nomeColuna[i].trim())){
                result = nomeTratado[i];
                break;
            }
   }
   return result;
}

4 Respostas

silva.fernandes

Amigo … tive problemas o mesmo problema … e tb com esse código, que acredito q seja do mesmo livro q eu tenho …( não vamos entrar em detalhe sobre o livro né …rss)

Mas até q achei um outro código que clare ou minhas ideias …

Acredito que esse material feito no Netbeans conectando no Firebird, talvez ele possa te ajudar …

Falowww

fernando_psan

Obrigado Silva … vou analisar o código qualquer coisa posto novamente.

Vlwww!!!

fernando_psan

Não sei se alguém vem acompanhando minha odisséia para carregar uma JTable… mas por incrível que pareça não consegui carrega - la…

Silva refiz o código conforme o exemplo que vc passou, criando o modelo e tal, mas mesmo assim não consegui.
Já verifiquei a consulta e está OK, o resultSet também e mesmo assim os dados não parecem…

Seria alguma configuração da JTable??

Se tiverem alguma outra dica para me ajudar …

Reforçando estou utilizando o NetBeans 5.0, acessando uma base de Dados Access.

Obs.: Segue em anexo o código para preenchimento da jtable.

Obrigado.

lucas.lnx

Blz…eu tive muito problema com JTable tb…mas consegui resolver alguns…
falta só o Header q não aparece…
Vê aí a estrutura:

private void CarregaLista() throws Exception {
        connect conn;
        instancia inst;
        ResultSet rst;
        String str;
       
        //  grd é minha JTable


        String[] header = {"Profissional", "Paciente","Procedimento","Início","Fim","Observação "};
        Vector aux = new Vector(1);        
        //Abre conexão com o Oracle XE
        conn = new connect("Login","Senha",true);
       //Cria uma instância da conexão
        inst = new instancia (conn);
        
        str ="Select " +
            "A.NUM_PROFISSIONAL||' - '||B.NOM_PROFISSIONAL, " +
            "A.NUM_PACIENTE||' - '||C.NOM_PACIENTE, " +
            "A.NUM_PROCEDIMENTO||' - '||D.NOM_PROCEDIMENTO, " +
            "A.DAT_INICIO, " +
            "A.DAT_FIM, " +
            "A.OBS_PROF, " +
            "A.FLG_BONUS " +
            "From " +
            owner + ".AGENDA A, " +
            owner + ".PROFISSIONAL B, " +
            owner + ".PACIENTE C, " +
            owner + ".PROCEDIMENTO D " +
            "Where " +
            "A.NUM_PROFISSIONAL = B.NUM_PROFISSIONAL " +
            "And A.NUM_PACIENTE = C.NUM_PACIENTE " +
            "And A.NUM_PROCEDIMENTO = D.NUM_PROCEDIMENTO";
        
        //Retorna um ResultSet
        rst = inst.query(str,"");
       
        
        grd.setModel(new DefaultTableModel(new Object [][] { },header));
        JTableHeader grdH = grd.getTableHeader();
        grdH.setVisible(true);
        grdH.setForeground(Color.YELLOW);
        grdH.setBackground(Color.BLACK);
        
        DefaultTableModel dtm =(DefaultTableModel)grd.getModel();
        
        while (rst.next() && rst.getRow() > 0){
            for (int x = 0; x <= header.length ; x++){
                if(x == 3 || x == 4){
                    str = rst.getString(x + 1).substring(8,10) + "/" ;
                    str = str + rst.getString(x + 1).substring(5,7) + "/";
                    str = str + rst.getString(x + 1).substring(0,4) + "  ";
                    aux.addElement(rst.getString(x + 1));
                }else{
                    aux.addElement(rst.getString(x + 1));
                }
            }
            dtm.addRow(aux);
        }
        grd.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        grd.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
        grd.setCellSelectionEnabled(false);
    }
Criado 8 de setembro de 2006
Ultima resposta 11 de set. de 2006
Respostas 4
Participantes 3