Ajuda pelo amor de deus!

6 respostas
javolatra

Estou com um problema para atualizar a minha tabel, quando eu altero um evento ela é atualizada sem problema, mas quando eu peço para excluir um evento, ele é excluído, mas minha tabela não é atualizada, e esse evento excluído só sai quando eu fecho o form e abro dinovo.
segue os códigos:

private void buttonExcluirMouseClicked(java.awt.event.MouseEvent evt) {                                           
        // Excluir um evento (Não esta atualizando a minha tabela)
        try{
            conexao.stmt.execute("delete from movimentos where codigo = " +fieldCodEvento.getText());
            JOptionPane.showMessageDialog(this,"Movimento excluído!");
            
            chamarEvento(fieldCodFuncionario.getText()); // preenche a minha tabela com os dados do banco
            
        }catch(SQLException e){
            e.printStackTrace();
            JOptionPane.showMessageDialog(this,"O Movimento não foi excluído!");
        }
    }                                          
    
    private void buttonOKMouseClicked(java.awt.event.MouseEvent evt) {                                      
        
        // se o fieldQuantidade estiver vazio
        if(fieldQuantidade.getText().isEmpty()){
            // insere a String 0 no fieldQuantidade
            fieldQuantidade.setText("0");
        }else{
            if(fieldValor.getText().isEmpty()){
                // insere a String 0 no fieldValor
                fieldValor.setText("0");
            }
        }
        // Alterar o evento (tá funcionando BLZ)
        try{
            conexao.stmt.executeUpdate("UPDATE movimentos SET "+
                    "quantidade = '"+fieldQuantidade.getText()+"',"+
                    "valor = '"+fieldValor.getText()+"'"+
                    "WHERE codigo = "+fieldCodEvento.getText());
            
            JOptionPane.showMessageDialog(this,"Evento alterado!");
            
            chamarEvento(fieldCodFuncionario.getText()); // preenche a minha tabela com os dados do banco
            
        }catch(SQLException e){
            e.printStackTrace();
        }
Vou postar tb o código da classe chamarEvento
// Método usado para chamar todos os eventos de um determinado funcionário
    public void chamarEvento(String strCodigo){ // Esse método recebe um parametro para ser usado como o código do funcionário a ser pesquisado
        
        // o objeto do tipo JTextField recebe a variavel do parametro do método
        fieldCodigo.setText(strCodigo);
        
        try{
            /* Essa query seleciona todos os eventos da tabela movimento que tenha o código do funcionário desejado
               e passa esses dados para a variavel de referencia conexao.rs */
            conexao.rs = conexao.stmt.executeQuery("SELECT movimentos.registro,movimentos.nome,movimentos.codigo,movimentos.descrincao, movimentos.quantidade, movimentos.valor" +
                    " FROM movimentos,funcionarios WHERE funcionarios.registro = movimentos.registro AND funcionarios.registro = '"+fieldCodigo.getText()+"'");
            
            // representa a linha da tabela
            int linha = 0;
            
            // enquanto a houver um próximo registro
            while (conexao.rs.next()) {
                
                fieldCodFuncionario.setText(conexao.rs.getString("registro"));
                fieldNomeDoFuncionario.setText(conexao.rs.getString("nome"));
                // tabela recebe o código do movimento
                tabelEventoFunc.setValueAt(conexao.rs.getString("codigo"), linha, 0);
                // tabela recebe o registro do funcionário
                tabelEventoFunc.setValueAt(conexao.rs.getString("descrincao"), linha, 1);
                // tabela recebe o nome do funcionario
                tabelEventoFunc.setValueAt(conexao.rs.getString("quantidade"), linha, 2);
                // tabela recebe o nome do funcionario
                tabelEventoFunc.setValueAt(conexao.rs.getString("valor"), linha, 3);
                
                // linha recebe 1 (para simular a próxima linha)
                linha++;
                
            }
            conexao.rs.close();
            
        }catch(SQLException e){
            e.printStackTrace();
        }
    }

6 Respostas

gilberto_oliveira

Não entendi bem, o que não atualiza é a tabela no DB ou sua interface??

W

Depois de excluir o registro, invoke o método revalidate() do panel onde está a listagem.

acho que isso resolve seu problema.

ViniGodoy

Use a table do jeito certo. Você alterar os dados da tabela sempre através do Model, não através da view (que no caso é a classe JTable).

Dê uma lida no seguinte tutorial (em inglês):
http://www.informit.com/articles/article.aspx?p=332278&rl=1

Você vai ver que implementar o seu TableModel deixa o código mais limpo, claro, orientado a objetos e desacoplado. E evita o problema que você está tendo. Os resultados são excelentes.

PS: Nâo crie tópicos com títulos como esse. Seria muito melhor um tópico como “problemas JTable”. Já daria a dica para quem vai te ajudar de que o problema é no Swing, e não em web.

javolatra

O método revalidate() não funcionou.

private void buttonExcluirMouseClicked(java.awt.event.MouseEvent evt) {                                           
        
        try{
            conexao.stmt.executeUpdate("delete from movimentos where codigo = " +fieldCodEvento.getText());
            JOptionPane.showMessageDialog(this,"Movimento excluído!");
            
            tabelEventoFunc.revalidate(); // REVALIDATE
           
            
        }catch(SQLException e){
            e.printStackTrace();
            JOptionPane.showMessageDialog(this,"O Movimento não foi excluído!");
        }
    }
ViniGodoy

Mais uma vez… esse aí é o caminho errado…

Pesquise sobre o TableModel, que é o jeito certo de se trabalhar com JTables.
Você vai ver que é muito mais simples e não tem problemas desse tipo.

ViniGodoy

By the way,

Aqui tem um exemplo de um TableModel simples, que implementei há uns tempos atrás no GUJ:
http://www.guj.com.br/posts/list/57203.java#300612

Criado 9 de janeiro de 2008
Ultima resposta 10 de jan. de 2008
Respostas 6
Participantes 4