Forma Correta de Utilizar DefaultTableModel

Ola a todos. Tudo bem?
A intenção desse Topico não é fazer uma pergunta e sim deixar uma dica sobre o DefaultTableModel, Vamos lá.
Tenho visto em muitos topicos de conversa tanto aqui no guj quanto em outros forums dizendo que “DefaultTableModel é Ruim”, “Não utilize DefaultTableModel”. E o que eu tenho a dizer sobre isso é que o que esta errado não é utilizar o DefaultTableModel e sim a forma como estão utilizando (no meu caso utilizava), Alem do problema não ser só com essa class e sim com a falta de estruturação e padronização do projeto.
A forma utilizada por quem esta comessando a programar geralmente é criar os frames das tela e lá mesmo colocar as funções de regras de negocio, cadastro e o mais neccessario.
Eis a baixo um exemplo de codigo geralmente usado:

private void jBNomeActionPerformed(java.awt.event.ActionEvent evt) {                                       
    Pessoa p = new Pessoa();
    
    String nome = jTNome.getText();
    
    String sobrenome = jTSobrenome.getText();
    
    p.setNome(nome);
    p.setSobrenome(sobrenome);
    
    //regras de negocio
    
    pessoa.add(p);
    
    carregaTabela();
}
private void carregaTabela(){
    DefaultTableModel model = new DefaultTableModel();
    
    model.addColumn("Nome");
    model.addColumn("Sobrenome");
    
    for (Pessoa pessoa1 : pessoa) {
        model.addRow(new Object[]{pessoa1.getNome(),pessoa1.getSobrenome()});
    }
    
    jTable1.setModel(model);
}

A utilização do desse codigo funcionaria?
Sim, mas necessita de repetição de codigo e não fica muito organizado, fora que o DefaultTableModel não foi pensado para essa função.
Essa implementação da TableModel serve para gerenciar um vetor bidirecional de objetos.
Sendo assim tem funções para gernciar esse tipo de estrutura, veja esses video a seguir com exemplo de utilização.

Video 1: https://www.youtube.com/watch?v=Q2_YTOR7Qic
Video 2: https://youtu.be/ABJJDahiLpw

Deixe comentarios dizendo o que vcs acharam do video. Obrigado.

A forma mais adequada de utilizar o DefaultTableModel é não utilizar o DefaultTableModel.
Crie seus próprios table models e seja feliz.

4 curtidas

Link

1 curtida

Nunca usei Java pra desktop, mas é curioso essa discussão que aparecia sempre, até agora depois do Swing estar morrendo. Isso muda alguma coisa pro usuário?

1 curtida

Isso é coisa de faculdade que não atualiza a sua grade curricular

1 curtida

Sim, o ideal seria criar o proprio tableModel, mas para o problema de trabalhar com vetores simples seria util utilizar o defaulttablemodel, alem de ja esta pronto é so pegar e usar podendo herdalo e adicionar umas coisas a mais que falta.
E outra coisa: Muito das veses o problema não é so o defaulttablemodel e sim não ter um padrão e uma arquitetura pra seguir.
Obrigado pela resposta.

Pro usuario pode mudar um pouco na performace (não so pela utilização errada do DefaultTableModel) e sim tambem por causa da falta de seguir alguns padrões.
E pro programador quando o sistema for muito grande a manutenção fica algo muito complexa.

Obrigado pela resposta

Java é muito complicado, até pra fazer um grid tem essas viagens.

1 curtida

Mas é muito interessante a organisação.

Exatamente!

Infelizmente a maioria insiste em jogar o MVC no lixo.

1 curtida

E quem disse que você não pode trabalhar com vetores ao invés de collection num tablemodel customizado?
Sem falar que o trabalho de estender é o mesmo que você vai ter para criar um exclusivo e muito mais flexível.