Nao consigo atualizar JTable em tempo real (Java)

3 respostas Resolvido
SoniaBotechia

Boa Noite,

Tenho um form com botão novo ( que abre um novo formulário para insersão de novo dado), e neste formulário tenho um JTable que lista os meus dados já cadastrados.
A ideia é cadastrar o novo dado, o formulario de cadastro fechar, e atualizar em tempo real o formulario que o chamou com o JTable ja atualizado.

Para isso usei interface java implementando um callback(sei que a ideia esta certa pq ja consegui atualizar um combo box), uso uma AbstractTableModel, onde implementei meus metodos.

a funçao que está no form:

private CallbackForm callbackPag(){
        return new CallbackForm<FormaPagamento>(){
             @Override       
             public void fim(FormaPagamento formaPagamento){
                FormaPagamento fp = new FormaPagamento();
                formNovaFormaPagamento.setVisible(false);
                formNovaFormaPagamento = null;// limpando a memoria
               ((FormaPagamentoModel) TbFormaPagamento.getModel()).addFormaPagamento(fp);
            }                
        };
    }

a funçao que implementei no AbstractTableModel :

public void addFormaPagamento(FormaPagamento formaPagamento){
        
        int index = formaPagamentos.indexOf(formaPagamentos);
        fireTableRowsInserted(index, index);
        
    }

estou aprendendo sou estudante do 4 semestre de ads, a tabela nao atualiza, podem me dizer o que esta errado e como corrigir?
Obrigada.

3 Respostas

Rodrigo_Vieira_Pinto

Na segunda linha do método fim(), você está criando um objeto FormaPagamento, e está inserindo ele no tableModel. Não deveria ser o formaPagamento que o fim() recebe como parâmetro?

Junior_Campanha

bom dia não sei se isso vai te ajudar em alguma coisa

sou iniciante em programação mas acredito que por logica é possivel resolver isso.

vou colocar aki o meu código que mostra os valores na minha tabela

Eu fiz assim

// cria a configuração da tabela
DefaultTableModel tmDescontaminação = new DefaultTableModel(null,new String []{“OS”, “N_INMETRO”, “DATA”, “TIPO” } );
List descontaminação;
ListSelectionModel lsmDESCONTAMINADOR;

// código do botão procurar         
public void listardesontaminador() throws SQLException{ //botao procurar
    DESCONTAMINADOR_DAO dao = new DESCONTAMINADOR_DAO();
    descontaminação = dao.getLista("%" + jTFPESQUISAR.getText() + "%");
    mostrarPesquisa(descontaminação);
}

 //adiciona os valores na tabela
public void mostrarPesquisa(List<DESCONTAMINADOR> descontaminação){
    if(descontaminação.isEmpty()){
       JOptionPane.showMessageDialog(null, "Nenhum contato cadastrado!!!");       
    }else{
        String[] linha = new String[] {null, null, null, null};
        for (int i = 0; i <descontaminação.size(); i++) {
         tmDescontaminação.addRow(linha);
         tmDescontaminação.setValueAt(descontaminação.get(i).getOs(), i, 0);
         tmDescontaminação.setValueAt(descontaminação.get(i).getN_inmetro(), i, 1);
         tmDescontaminação.setValueAt(descontaminação.get(i).getData(), i, 2);
         tmDescontaminação.setValueAt(descontaminação.get(i).getTipo(), i, 3);
        }
                }
}

nas propriedades da minha tabela na guia código eu coloquei o seguinte código pós-inicialização

>  jTablePesquisar.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
lsmDESCONTAMINADOR = jTablePesquisar.getSelectionModel();
    lsmDESCONTAMINADOR.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
            if (!e.getValueIsAdjusting()) {
                jTPesquisarLinhaSelecionada(jTablePesquisar);
            }
        }
    });

acredito que no seu caso vc colocaria no seu botao de salvar após o seu metodo de cadastro o metodo que no meu estaria no botao pesquisar

assim toda vez que vc salvar ele vai executar a pesquisa e te retornar na tabela

só deve ser preciso altera a linha onde esta a minha condição do dao.getlista para que pegue todos os valores do seu bd e nao um valor correspondente a um jtextfield

espero que isso possa te ajudar em algo

SoniaBotechia
Solucao aceita

Resolvi o problema hoje, estava bem perto da soluçao, vou postar aqui na tentativa de derrepente ajudar alguem.

No form da tabela que contem o Jtable que sera atualizadao com a nova forma de pagamento.

private CallbackForm callbackPag(){

return new CallbackForm(){

<a class="mention" href="/u/override">@Override</a>

public void fim(FormaPagamento formaPagamento){

formNovaFormaPagamento.setVisible(false);

formNovaFormaPagamento = null;// limpando a memoria

//jogando dentro da variavel o TbModel para ser manipulado

FormaPagamentoModel formaPagamentoModel = (FormaPagamentoModel) TbFormaPagamento.getModel();

formaPagamentoModel.addFormaPagamento(formaPagamento);

formaPagamentoModel.fireTableDataChanged();

}

};

}

a funçao que implementei no AbstractTableModel
public void addFormaPagamento(FormaPagamento formaPagamento){

formaPagamentos.add(formaPagamento);

}

fazendo isso consegui atualizar a tabela em tempo real, obrigada, problema resolvido.

Criado 8 de novembro de 2016
Ultima resposta 10 de nov. de 2016
Respostas 3
Participantes 3