[Dúvida] DefaultTableModel

4 respostas
Nicolas_Fernandes

Olá, pessoal do GUJ!!

Venho me perguntando há alguns dias…

Eu sempre uso o DefaultTableModel para modelar minhas JTables, mas muitos não o aconselham. Todos aconselham a usar o AbstractTableModel.

Eis a questão: quais as vantagens de um Abstract para um DefaultTableModel??

Desde já, grato!!

[]'s

4 Respostas

mvargens

DefaulTableModel extends AbstractTableModel. Usar na JTable não faz diferença. Usar no seu código pode fazer, uma vez que vc queira trocar de TableModel você vai ter que alterar em outros lugares para utiliza-la. Ex:

MinhaTableModel extends AbstractTableModel{
}

AbstractTableModel  a = new DefaultTableModel();
MinhaTableModel     m = new MinhaTableModel();
DefaultTableModel   d = new DefaultTableModel();
        
m = d; //Não pode
a = d; //Pode
a = m; //Pode
ViniGodoy

Existe uma série de vantagens em se fazer um filho de AbstractTableModel:

a) Você evita duplicação de dados. O seu tablemodel próprio trabalhará diretamente com sua classe de negócio, sem a necessidade de copiar campos dos objetos para Strings;
b) Deixa o código mais simples: Nada de conversões de string para outros tipos, você pode fazer um método get() que retorne seu próprio objeto. O código do modelo de dados fica separadinho do código da manipulação da tela.
c) O código fica mais seguro.
d) Respeita a arquitetura MVC.
e) É mais rápido. O DefaultTableModel se baseia no Vector, inteiro synchronized. O uso do Vector também não é recomendado pela sun faz tempo.

Nicolas_Fernandes

Olá, Vini!

Interessante… Usar um AbstractTableModel parecer ser bem mais interessante!

Eu vi uma implementação que você fez em um tópico…

Agora, uma outra dúvida:

  1. É possível fazer um AbstractTableModel genérico para o meu software?
  2. Ficaria um código rápido e utilizável, trabalhando genericamente?

[]'s

ViniGodoy

Sim, é possível.

Dê uma olhada nos links da minha assinatura, você vai encontrar lá dois exemplos disso.

O ObjectTableModel, do Mark_Ameba, é um TableModel genérico, que usa reflexão para identificar como os objetos devem ser desenhados.
No link do auto-filtro, também existe um TableModel esperto. Ele se comporta como um ArrayList, e usa um enum para definir as colunas.

Agora, eu sugiro que você aprenda a fazer um TableModel específico, para sua classe, antes de começar a usar os muito automatizados. Entender o funcionamento do TableModel é um passo importante para compreender exatamente como o JTable funciona. Eu fiz um tópico que explica o funcionamento de um TableModel básico:
http://www.guj.com.br/posts/list/132698.java#714736

A minha opinião é até um pouco mais radical. Tenho visto que o DefaultTableModel causa mais mal do que bem. Por mim, a Sun deixaria ele como deprecated, e removeria ele do java a longo prazo.

Criado 17 de setembro de 2009
Ultima resposta 18 de set. de 2009
Respostas 4
Participantes 3