Metendo a cara em AbstractTableModel

6 respostas
matheusssilva

Bem gente nesse novo trabalho resolvi criar vergonha na cara e parar de usar DEfaultTableModel e comecei a criar meu proprio modelo.

Comecei a criar o modelo e queria a analise da galera mais experiênte nesse assunto, antes que eu termine o modelo e saia aplicando nas tabelas por ai.

Bem a intenção é criar um modelo generico que eu possa usar para todas as tabelas da aplicação. Até o momento eu ja reescrevi os metodos abtratos herdados de AbstractTableModel.

package br.com.folhax.gui.controls;

import java.util.List;
import javax.swing.table.AbstractTableModel;

/**
 *
 * @author Matheus
 */

public class MatheusTableModel extends AbstractTableModel{
    private List nomecoluna; //Lista com os nomes das colunas;
    private List<List> dadoscoluna; // Lista bidimenssional

    public MatheusTableModel(List nomecoluna, List<List> dadoscoluna){
        this.nomecoluna = nomecoluna;
        this.dadoscoluna = dadoscoluna;
    }

    public int getRowCount() { // Cada produto uma linha
        return dadoscoluna.size();
    }

    public int getColumnCount() {
        return dadoscoluna.get(0).size();
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        
        if(rowIndex > dadoscoluna.size()-1 || columnIndex > dadoscoluna.get(rowIndex).size()-1)
            return "";
        else
            return dadoscoluna.get(rowIndex).get(columnIndex);
    }

}

Então pesso que a galera experiente analize para ver se existe alguma bizarrisse antes que eu conclua.

Valeu gente.

6 Respostas

E

Não é por nada não, mas você não gostaria de aprender a usar o GlazedLists ( http://publicobject.com/glazedlists/ ) ?

arqueiros

Tudo bem Matheus?!?!

Eu nunca trabalhei com AbstractTableModel logo não posso opinar diretamente em seu código mas recentemente estive lendo um tópico a respeito de como usa-lo sem usar o defaultTableModel, segue abaixo o link.

http://www.javasimples.com.br/mundo-java/death-to-defaulttablemodel-abstracttablemodel-rulez/#more-171

Abs.

Marky.Vasconcelos

Literalmente, fazer uma List voce esta fazendo uma copia suja do DefaultTableModel.

Se quiser pensar em algo generico pense em OO, existe a solução do ViniGodoy com enums e tem a minha que usa reflection por debaixo dos panos para pegar o valor correto para coluna.(Ambos na minha assinatura)

E

Além disso, é muito ruim você criar um TableModel genérico baseado em listas de listas (ou seja, um array disfarçado). É melhor você pensar num TableModel como sendo uma lista de objetos, e cada coluna corresponder a uma propriedade da classe desse objeto.

O Glazed Lists funciona exatamente assim (um TableModel é baseado em uma lista de objetos, não em uma lista de listas.)

matheusssilva

E ae Mark?

Bem o poblema é que não quero ficar preso a soluções de terceiros, isso deixa o cara atrelado e dependente. Se você ou alguém poder me mostrar uma outra saída para não usar Arrays fico grato.

E

matheusssilva:
E ae Mark?

Bem o poblema é que não quero ficar preso a soluções de terceiros, isso deixa o cara atrelado e dependente.

Faça o seguinte. Baixe a solução do MarkyVasconcelos, estude-a, veja como é que funciona, e pegue só o que interessa. Eu prefiro usar as soluções de terceiros mas estudar o código deles, até para aprender como é que se faz, e como é a cabeça das outras pessoas.
Não acredito que uma só pessoa consiga fazer tudo sozinho, e não acredito que usar alguma coisa de terceiros deixe uma pessoa atrelada e dependente.
(Obviamente usar algo de terceiros deixa atrelado e dependente se você não tiver o código-fonte para estudar, igual quando você compra uma biblioteca de componentes - ambiente .NET ou VB 6 - e você acredita que aquelas coisas foram feitas por mágica.)

Criado 1 de julho de 2010
Ultima resposta 2 de jul. de 2010
Respostas 6
Participantes 4