sexta-feira, 30 de novembro de 2007

Criar formulário com Jtable populado de uma classe com JPA

1.Criar o Jframe (ou similar)
2.Inserir o Jtable
3.Inserir o componente EntityManager
4.Inserir o componente Query, relacionar com o EntityManager inserido anteriormente e preencher a propriedade query com o select no formato jpa, exemplo: SELECT c FROM Clientes c
5.Inserir o componente List e relacionar com o componente Query, marque também a propriedade Observable como true
6.Selecione a opção Bind/Elements do Jtable (clicando com o botão direito sobre o componente)
7.Na opção Bind Source relacione com o componente List e clique no botão Ok
8.Clique novamente com o botão direito sobre o Jtable e selecione a opção Table Contents, na guia Table Model com a opção Bound selecionada, relacione o campo Bind Source com o componente List
9.Acesse a guia Columns e adicione as colunas necessárias, informando no campo Expression da seguinte forma, exemplo: ${codigo} ou ${nomeCompleto}, o nome do campo segue o mesmo padrão utilizado pelo JPA, clique no botão Close.

E caso você ainda não saiba, pode dar um get dos dados persistidos assim:

int codigo = ((Clientes)list1.get(jTable1.getSelectedRow())).getCodigo();
String nomeCompleto = ((Clientes)list1.get(jTable1.getSelectedRow())).getNomeCompleto();

10 comentários:

Marcos disse...

Não sei se vc já reparou, mas quando vinculamos o text de um textfield a um campo da tabela, caso esse campo seja do tipo "Date", o sistema se comporta de forma inesperada. Clicando no registro, não aparece no textfield o valor do campo data e de 3 em 3 ou 4 em 4 registros se vc passar de um por um pelo teclado, verá que o sistema chega até mesmo a travar. Será que alguém sabe por que isso acontece? Alguem saberia dizer-me a solução para tal problema?

Abraço a todos,

Marcos Reis

Jerônimo disse...

Marcos, realmente tive alguns problemas com campos do tipo data até eu pegar a manha pra relacioná-los com o banco de dados, mas nada parecido com o que você relatou, na verdade estão funcionando perfeitamente.

Marcos disse...

Descobri uma coisa que pode ser a chave para o conserto, mas não consegui implementar. Criei uma classe de conversão de data do tipo do MySql(aaaa-mm-dd) para o tipo, digamos ... brasileiro(dd/mm/aaaa). Clicando com o direito no textfield, indo em vincular/text, clicendo na segunda aba tem um campo chamado "conversor", pois bem essa classe que criei deveria aparecer ali dentro, pois na hora em que os registros fossem carregados do jTable pro jText ele seria filtrado e vice-versa. Minha pergunta é: Como instanciar essa classe neste formulário e em que ponto do código instanciá-la? Como fazer com que o nome da variável já instanciada apareça no campo que citei(conversor) e torne-se selecionável?

Jerônimo disse...

Agora me lembrei onde eu tive problemas com datas, descrevi no meu primeiro post:

http://netbeando.blogspot.com/2007/11/bind-de-campo-texto-com-tipo-de-dado.html

Veja se ajuda de alguma forma...

Marcos disse...

Olha cara, entendi perfeitamente o que vc quis dizer, porém infelizmente no componente jText Não há a propriedade "value" como citado em seu artigo. Portanto amigo, nada feito. Ainda acho que o caminho seja conforme postei anteriormente. Abraço . . .

Everton disse...

Opa,
coloquei uma função genérica para a conversão, assim acredito que fica mais fácil para pequenos programas que não necessitam de uma interface mais bem cuidada.

http://evertondewes.blogspot.com/2008/08/mtodo-genrico-para-popular-um-jtable.html

att,

teste disse...

Tem como vincular um Jtable com uma List, sem usar query...
Tenho um cliente remoto swing que recebe umA List do servidor de app, já tentei vincular este list com um jTable e não consegui!!

T+
jc

Francisco Shin disse...

Troque o tipo Date para o tipo Object

Anônimo disse...

Olá, estava procurando em fóruns sobre o campo do tipo Date usando JPA em MYSQl e encontrei este tópico.
Eu tenho um "formulário de amostra mestre e detalhe", onde na parte de baixo eu informo os dados e eles vão aparecendo na parte de cima.Porém ao digitar a data, ela não aparece lá em cima. Eu usava um JTextfield e dava erro, depois passe a usar um JFormattedTextfield e o erro parou mas como eu disse ao digitar a data , ela não aparece na JTable na parte de cima. Eu vinculei o JFormattedTextfield a "value" e escolhi o tipo Date. Não estou conseguindo gravar este campo do tipo date. Se alguém tiver alguma dica eu agradeço. Estou pesnando em mudar o campo de Date para String....

Anônimo disse...

Estou com o mesmo problema que você tem agora a data aparece no jFormattedTextField mas não aparece no jTable, é como se não estivesse vinculado, se você já conseguiu resolver, por favor me ajude.

Grato,
Rubens