JTable recebendo um List ao invez de um Vector

2 respostas
manoel

ae galera,

eu quando crio um JTable os objetos dentro dela são serializados, pois eles por default são inserido em um vector, porém objetos serializados são muito caros em termo de implementação. Então não queria que ele usasse vector.

eu gostaria que o JTable ao invéz de inserir em um vector, inserisse em um List.

se alguém conseguir me ajudar, ficaria grato. xD

2 Respostas

ViniGodoy

Não entendi exatamente o que você quis dizer com “os objetos dentro dela são serializados”. Você não quis dizer sincronizados?

O DefaultTableModel usa um Vector. Você pode implementar o seu próprio TableModel. Para isso, basta criar uma classe filha de AbstractTableModel.

Criar um TableModel com uma list é realmente simples, especialmente porque você não precisa usar um List de Lists, mas um List da própria classe que você está exibindo.

Eu recomendo sempre fazer isso, não só por causa da performance, mas porque também é mais fácil e deixa o código mais elegante. Veja mais detalhes sobre TableModels aqui:
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#data

Se você está tendo problemas de performance, eu também recomendo que você rode sua aplicação utilizando um profiler e tente achar os gargalos e corrigi-los. Dificilmente os problemas de performance estão onde achamos que eles estão, e dificilmente o problema se resolve mudando de Vector para List. A sincronização adiciona uma demora sim, mas ela é pequena e só se tornaria um problema numa tabela realmente gigantesca.

Dá uma olhada nesse artigo sobre isso:
http://www-128.ibm.com/developerworks/java/library/j-jtp04223.html

O profile te auxilia medindo o tempo gasto em cada método de sua aplicação e mostrando onde os métodos que realmente impactam na execução estão localizados. É sempre preferível otimizar SOMENTE esses métodos, mantendo os demais trechos de código claros.

Se informe sobre os profilers! O Eclipse tem um no projeto TPTP:

O Netbeans também tem outro. E você pode sempre baixar o EJP, que é independente de IDE.
http://ejp.sourceforge.net/

E nunca se esqueça das 5 regrinhas da otimização:
http://www.guj.com.br/posts/list/51870.java#273150

Guerr

Se você quiser um TableModel que receba um List, sugiro dar uma olhada no SwingBean. A classe BeanTableModel permite que você insira listas de objetos e configure as colunas através dos nomes das propriedades em um arquivo XML. É muito fácil!!

http://swingbean.sourceforge.net

A classe BeanTableModel ainda possui métodos para ordenação e filtragem da lista!

Criado 16 de fevereiro de 2007
Ultima resposta 16 de fev. de 2007
Respostas 2
Participantes 3