Auxílio na criação da minha propia Jtable e JtableModel

Boa noite pessoal,

estou fazendo uma aplicação e reparei que a mesma perde performance no momento de atualizar a JTable.
como estou fazendo em tempo de execução a única forma que encontrei (como sou iniciante) foi remover todas as linhas da Jtable e adicionar todas as linhas novamente.
Segue abaixo método para atualizar a tabela:

// ao final de cada operação chamo esse método. perdendo assim performance.
private void atualizaTabela(String pesquisa) {
        tbRamais.updateUI();
        model = (DefaultTableModel) tbRamais.getModel();
        model.getDataVector().clear();
        try {
            rVet = controleRamal.obterRamalPesquisa(pesquisa);
            for (int i = 0; i < rVet.length; i++) {
                Ramal r = rVet[i];
                if (r != null) {
                    Diretoria diretoria = controleDiretoria.obterDiretoriaPeloCod(r.getCodigoDiretoria());
                    Gerencia gerencia = controleGerencia.obterGerenciaPeloCod(r.getCodigoGerencia());
                    NRamal nRamal = controleNRamal.obterNRamalPeloCod(r.getRamal());
                    Object linha[] = {
                        r.getNome(),
                        nRamal.getNRamal(),
                        diretoria.getNome(),
                        gerencia.getNome()
                    };
                    model.addRow(linha);
                }
            }

Amigos, notei em outros tópicos que não é recomendado utilizar DefaultTableModel, então, estou querendo criar meu propio defaultTableModel estendendo de um abstractTableModel.
Mas não sei como começar, tenho que criar meu propio Jtable tambem? sobrescrevendo o método setModel?
como crio esse DefaultTableModel? que métodos devo utilizar para fazer com que minha tabela atualize em tempo de execução?

Opá, rapaz, to na mesma sua, tentando criar meu primeiro TableModel, tenho tido algumas dificuldades, mas o passo inicial é esse mesmo, extenda a classe AbstractTableModel, crie o construtor alimentando a lista de objetos “List” e implementando as funções da abstract, alem das suas próprias.
Até agora não consegui fazer a minha model funcionar, mas continuo na luta. se descobrir algo, me fala o q vc fez, pq farei o mesmo se conseguir botar pra funcionar a minha aki!

Quanto a necessidade de implementar a JTable, acho q vc não vai precisar, pois toda a manipulação das linhas da tabela é feita pela model. sempre q vc setar a model na tabela ela monta as linhas

public class ClienteTableModel extends AbstractTableModel{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private List<Cliente> linhas;
	private String[] colunas = new String[]{"ID","Nome","RG","CPF","Endereço","Numero","Bairro","Telefone","Celular","Comercial","E-mail"};
        
       public ClienteTableModel(){
		this.linhas = new ArrayList<Cliente>();
		
	}
...
}

exemplo simples pra vc entender por onde começar

Você só tem que criar um filho de AbstractTableModel.
O link da minha assinatura tem diversos exemplos.

Vini vc é o cara velho, sempre ajudando os noobinha! Se eu não conseguri fazer a minha funcionar te fala!

Cara é um outro nivel trabalhar com TableModel, ja tinha sido chamada a minha atenção, mas agora que pequei o macete de trbalhar com ela, é muito mais fácil e organizado, vou ver se consigo explicar um pouco como faz.

Primeiro passo extender a classe AbstractTableModel
neste momento vamos logo criar as variaveis que são as linhas e colunas da nossa tabela.

public class ClienteTableModel extends AbstractTableModel{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private ArrayList<Cliente> linhas = new ArrayList<Cliente>();
	private String[] colunas;

Passo seguinte é criar o metodo Construtor da nossa TableModel

Bem, aki eu resolvi passar a coluna no contrutor por conta de uma coisinha que faço na aplicação e achei mais organzado, mas poderia ter passado o valor na declaração da ariavel “colunas”

public ClienteTableModel(){
		this.colunas = new String[]{"ID","Nome","RG","CPF","Endereço","Numero","Bairro","Telefone","Celular","Comercial","E-mail"};
}

O terceiro passo é implementar as classes da TableModel, sem as quais o nosso modelo não vai funcionar

        @Override
	public int getColumnCount() {
		return colunas.length;
	}
	@Override
	public int getRowCount() {
		// TODO Auto-generated method stub
		return linhas.size();
	}
	
	@Override
	public Object getValueAt(int row, int column) {
		Cliente cliente = linhas.get(row); // Carrega o item da linha que deve ser modificado  
		
		switch (column) { // Seta o valor do campo respectivo  
			case 0:  	
				return cliente.getId();
			case 1:
				return cliente.getNome();
			case 2:
				return cliente.getRg();
			case 3:
				return cliente.getCpf();
			case 4:
				return cliente.getEndereco();
			case 5:
				return cliente.getNumero();
			case 6:
				return cliente.getBairro();
			case 7:
				return cliente.getTelefone();
			case 8:
				return cliente.getCelular();
			case 9:
				return cliente.getComercial();
			case 10:
				return cliente.getEmail();
			default:
				throw new IndexOutOfBoundsException("Coluna não identificada");
		}
		
	}

Agora repare nesta ultima função getValueAt, ela é muuuito importante, pois ela é responsável por povoar sua tabela, não sei se estou sendo bem claro, mas se sua tabela mostrar apenas linhas em branco, o problema pode estar aki.

E por fim crie as funções que vc achar que precisa para atender suas necessidades, eu criei as que eu precisei para manipular meus dados, o qu enão quer dizer que vc deva seguir exatamente como está, mas a primeira parte vc tem q seguir a risca!

[code]
public String getColumnName(int column){
return colunas[column];
}

public int getIdAt(int row) {
	return linhas.get(row).getId();
}

public void removeRow(int row){
	linhas.remove(row);
}

public void addRow(Cliente cliente){
	linhas.add(cliente);
}

public Cliente getCliente(int row){
	return linhas.get(row);
}

public void setCliente(int row, Cliente cliente){
	linhas.set(row, cliente);
}[/code]

Espero ter ajudado e contribuido com o forum que tem me ajudado tantas vezes

Abraços e sucesso pra todos

Vini sou seu fã! :smiley: