GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Atualizar dados da JTable após os dados serem alterados


#1

Boa tarde Galerinha… :lol:
To com uma dúvida aqui que é o seguinte.: Ao clicar em uma Linha da JTable os dados são capturaos e jogados nas suas respectivas TextFields, ai clico no botao alterar e os dados são perfeitamentes alterados no Banco de Dados, mas eles nao se alteram na JTable em tempo de execução… existe algum comando que posso estar chamando para a JTable ser atualizada em tempo de Execução???


#2

Ai depende de como vc esta salvando no banco.

Um exemplo facil de vc entender. Ee vc esta com o netbeans instalado ae… é criar um “Formalario de amostra mestre/detalhe” com a tabela do banco que ele vai criar uma janela com um exemplo legal.


#3

Para alterar os dados exibidos na JTable, você deve alterar o TableModel da mesma.

Se você estiver usando o DefaultTableModel, pare, e faça seu próprio TableModel.

Uma vez feito isso, você pode alterar o modelo à medida que os própios TextFields são alterados.


#4

Estou utilizando DefaultTableModel, mas deve ter algum método dele que vc chama que faz isso!!


#5

[quote=Hebertbc]Ai depende de como vc esta salvando no banco.

Um exemplo facil de vc entender. Ee vc esta com o netbeans instalado ae… é criar um “Formalario de amostra mestre/detalhe” com a tabela do banco que ele vai criar uma janela com um exemplo legal.

[/quote]
Então, eles estão sendo alterados no banco de dados perfeitamente, mas na Jtalbe nao atualisam em tempo de execução,será que exite algum método que se usa para que a Jtable atualize?


#6

[quote=Anderson S.]Boa tarde Galerinha… :lol:
To com uma dúvida aqui que é o seguinte.: Ao clicar em uma Linha da JTable os dados são capturaos e jogados nas suas respectivas TextFields, ai clico no botao alterar e os dados são perfeitamentes alterados no Banco de Dados, mas eles nao se alteram na JTable em tempo de execução… existe algum comando que posso estar chamando para a JTable ser atualizada em tempo de Execução??? [/quote]
Se você criar seu TableModel sim. Novamente, aqui está o mais novo movimento do GUJ: Fuja de DefaultTableModel. Veja o link na minha assinatura para mais detalhes.


#7

Vou utilizar Defaulct, se vcs souberem de algum método para resolver meu problema postem…
Vlw…


#8

Tem uma solução, apague todos os dados da JTable (Ja que voce nao tem um método indexOf para saber qual a posição dele para atualizar lá assim como teria com um TableModel proprio) e depois popule novamente.

E fico triste em voce desistir de tentar aprender, então vou tomar a posição de não fazer exemplos com Default. Então… te dei a idéia… se vira.


#9

Eu nao desistir de AbstractTableModel, estou estudando ela concrteza…


#10

Enquanto isso lá vai ele novamente pelo caminho mais difícil…

No caso do AbstractTableModel, como o objeto editado fora do model é o mesmo objeto editado dentro, basta fazer um método para avisar o JTable que seu objeto mudou:

public void notifyUpdated(Cliente c) { int index = clientes.indexOf(c); fireTableRowsUpdated(index, index); }

Esse aviso só é necessário para que o JTable solicite novamente as informações para o modelo, ou seja, só para fazer a repintura dos dados na tela.

Então, no método do seu botão:

public void botaoSalvarClick() { cliente.setNome(txtNome.getNome()); //outros sets pertinentes aqui clienteDAO.salvar(cliente); seuTableModel.update(cliente); //Atualiza informações do cliente na tela }

No caso do DefaultTableModel:

  1. Pesquise em que linha do TableModel seu cliente está. Não é uma tarefa trivial, pois na sua tela pode ser que não haja um ID. Se houver, melhor. Se não houver, talvez você tenha que manter uma lista separada, só para fazer essa busca.
  2. Atualize campo por campo com o método setValueAt.

Pode parecer mais simples, mas pense toda vez que for inserir um campo novo, você terá que alterar esse método… Fora que de fato você está copiando dados, e duplicar dados na sua aplicação não só consome mais memória, como exige o trabalho de mante-los sincronizados.


#11

pois é viny, na minha table existe o ID, já por isso mesmo, por que o método atualizar e deletar, eu utilizo o ID para referenciar a Tupla, tem como vc me da um exemplo pratico de como seria no DefaulctTableModel… só pra constar, eu estou estudando AbstractTableModel sim…vlw


#12

Não dou exemplos com DefaultTableModel.


#13

Meu problema é que eu estou usando o Gui Builder do netbeans … mas sinceramente acho que às vezes mais atrapalha do que ajuda.
Como eu tbm estou começando e precisava apresentar um projeto pro meu chefe pra ficar na equipe, resolvi seguir esse caminho.

Talvez o tanto de “lixo” que o netbeans cospe no código seja um ponto negativo, mas basicamente, eles querem ver funcionando porque sabem que a gente é iniciante.

Então… eu queria setar um tablemodel usando o Gui Builder mas pelo que eu tava vendo não consigo implementar o AbstractModel porque o código é gerado automaticamente…enfim… Se alguém tiver alguma dica…


#14

Uma das coisa que faço é fazer uma nova consulta ao banco e preencher a table novamente após os dados serem atualizados. Por exemplo: No botão salvar/Gravar … sei lá, você coloca dentro do evento do botão uma nova consulta ao banco e manda preencher de novo a tabela. Sendo assim a table atualiza em tempo real.

Abraço.