Olá a todos,
Estou fazendo um software utilizando o Hibernate para o mapeamento dos objetos de persistencia, sendo assim tenho métodos que retornam uma coleção de dados, como por exemplo: List findAll, até ai tudo bem, já esta implementado, porém to com o seguinte problema:
Tenho uma tela de cadastro onde contem os campos para cadastro de um Usuário por exemplo. Caso o camarada resolva alterar ou deletar os dados de um usuário primeiro eu tenho q fazer uma consulta, entao é aberto uma tela de pesquisa que tem uma tabela, td certo até ai, a pessoa que está usando o software coloca um parametro de pesquisa (nome do usuário) e o sistema busca todos os usuarios que tem aquele nome e depois popula a tabela com um DefaultTableModel pegando os objetos do List através de um for., ou seja, tendo um array para a tabela e um para o List, gostaria que os dois fossem sincronizados, e quando vc alterado algo na tabela o List tbm fosse, alguem sabe como fazer isto:
Att,
Paulo
Ola Paulo,
O final da pergunta ficou meio nebuloso. Sua ideia era nao ter duas Lists em RAM, eh isso?
De qualquer forma, seria melhor voce usar uma abstracao em cima do Swing para nao ter que se preocupar com models, atualizacoes e afins. Assim como voce abstrai o acesso ao banco usando Hibernate ou outro framework, voce tambem deve usar uma abstracao em cima do Swing, como o genesis, por exemplo.
No caso, por exemplo, para popular uma tabela a partir de uma List<Usuario> e guardar o usuario selecionado numa propriedade usuario, voce poderia fazer assim:
@DataProvider(widgetName="usuarios", objectField="usuario")
public List<Usuario> populaUsuarios() {
// aqui voce invoca seu metodo de negocio que retorna os usuarios..
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
Voce pode saber mais sobre o binding Swing e @DataProvider na documentacao do genesis.
Caso nao tenha entendido sua pergunta, basta esclarecer.
Seguinte,
O que eu quero é isto mesmo, naum ter dois lists na ram, somente um, e por exemplo se meu list sofrer uma atualização, por exemplo, mudar uma propriedade de um de seus objetos, que o mesmo seja repassado para a jtable, entendeu?
Bom mas valeu, vou pegar sua dica do genesis, mas diz ai, na classe la onde tem o método @DataProvider, é algo que eu tenho q implementar usando algum modelo ja da swing?
Valeu,
Paulo
theIP = thePlaca.getIP(ip);
txtIP.setText(theIP.getIp());
Quando o IP eh alterado, eu chamo o REPAINT do txtIP e ele exibe automaticamente o novo IP, note bem, eu tenho um metodo setIP no meu objeto, assim sendo, se voce colocar:
Usuario u = new Usuario("fulano");
txtUsuario.setText = u.getNome(); //nesse momento o txt exibe: FULANO
u.setNome("outro fulano"); // o txt continua exibindo FULANO
txtUsuario.repaint(); // pronto, agora aparece OUTRO FULANO
Portanto, voce pode manter somente uma lista na memoria, e quando a lista for alterada, chame o repaint() dos controles.
Provavelmente vai resolver.
[]s
[quote=pauloperes]
Bom mas valeu, vou pegar sua dica do genesis, mas diz ai, na classe la onde tem o método @DataProvider, é algo que eu tenho q implementar usando algum modelo ja da swing?[/quote]
Nao. O motivo principal de usar o genesis eh abstrair a programacao da UI em um modelo de JavaBeans isolado, testavel e facil de dar manutencao. Voce nao precisa entender de models pra fazer isso. Os links no meu post anterior explicam melhor sobre isso.