Swing: Binding, JTable <-> List = Renderização congelada!

2 respostas
luizzeross

Descrição:

Estou com um problema chato aqui. Estou desenvolvendo uma aplicação em Swing + Hibernate no Netbeans. Criei um JTable e coloquei um BINDING dele com os dados de uma tabela do banco (usando as interfaces de edição do Netbeans). Dai ele cria uma List que pega o set de elementos de uma NamedQuery (persistencia), e esta mesma List esta “anexado” ao conteúdo do JTable.

O problema:

Quando faço alterações nessa List, a interface não consegue atualizar, e congela a renderização do ContentPane aonde se encontra.

Curiosidade:

O Netbeans tem uma opção de criar um Form baseado em uma entidade do banco, e ja cria a JTable com os JTextFields para edição dos dados (inserir, alterar, apagar, etc etc), dai tem um botão que faz o REFRESH do JTable, e ele apenas faz alteração da List e tudo acontece normal (a List esta “anexada” ao JTable tambem). Alguma sugestão? Quem quiser pegar o projeto e testar, estou hospedando o código no Google Code (podem fazer checkout, compilar e ver o problema, basta entrar em contato).

O código:

java.util.Collection data = usuarioQuery.getResultList();
            for (Object entity : data) {
                try {
                    ge.getEntityManager().refresh(entity);
                } catch (NullPointerException npe) {
                    System.out.println("EXCEPTION: " + npe.toString());
                }
            }
            
            usuarioList.clear();
            usuarioList.addAll(data);

2 Respostas

M

Luiz, aposto que sue tabela no banco, tem campo do tipo Date, não estou certo? Pois é, enfrento este problema desde que comecei a programar em java. Você por acaso conseguiu solução para isso? Eu pesquiso sobre o assunto há cerca de 02 anos e até agora nada. Vi que seu post também está sem respostas.

Abraço,

Marcos

luizzeross

E ai camarada, eu consegui contornar a situação mudando a forma com que estava instanciando as List. Eu olhei no init da classe da interface e vi como era o código gerado pelo Netbeans ao instanciar uma List e fazer o binding dela com uma JList ou JTable, daí percebi que é diferente. No momento estou sem o código da instanciação, mas basta ver no init das suas interfaces. Fazendo isto, vc pode colocar e tirar itens da List sem problemas que a interface vai ser atualizada normalmente, sem gerar a excessão descrita no início do fórum. Obrigado pela atenção!

Criado 21 de maio de 2009
Ultima resposta 3 de ago. de 2009
Respostas 2
Participantes 2