TableModel

Qual a melhor forma de chamar o TableModel para repintar minha tabela? To tentando aqui mas nao estou conseguindo. Tem algum metodo que “avisa” ao meu JTable para chamar getValueAt()? Pois nao queria instanciar toda hora um TableModel para criar novos dados para a tabela, e sim passar novos dados para um método do meu tableModel para fazer isso sem ter que instanciar novamente meu Model, porém nao to conseguindo.

DESSA FORMA NAO FUNCIONA

[code]public void itemStateChanged(ItemEvent arg0) {

				if(!nomeDaPasta.equalsIgnoreCase(comboBox.getSelectedItem().toString()))
				
					nomeDaPasta = comboBox.getSelectedItem().toString();
									
					artistas = leitura.leNomeDasMusicas(nomeDaPasta);
				
					list = addArtistas(artistas, nomeDaPasta);
						
					if(modelTable == null){
					
						modelTable = new TableModel(list); 
						
						table.setModel(modelTable); 							
					}else{
						
						modelTable.addLista(list); // esse aqui é o método no meu tableModel que eu criei para "tentar repintar mais nao consegui"

					
					}
																	
					
			}
			
		});[/code]

Assim funciona porém toda hora dou um new no TableModel é o correto mesmo?

[code]@Override
public void itemStateChanged(ItemEvent arg0) {

				if(!nomeDaPasta.equalsIgnoreCase(comboBox.getSelectedItem().toString()))
				
					nomeDaPasta = comboBox.getSelectedItem().toString();
									
					artistas = leitura.leNomeDasMusicas(nomeDaPasta);
				
					list = addArtistas(artistas, nomeDaPasta);	
					
					modelTable = new TableModel(list);
						
					table.setModel(modelTable);
											
					
			}
			
		});
			[/code]

Meu TableModel:

[code]package com.br.models.tables;

import java.util.ArrayList;
import java.util.List;

import javax.swing.table.AbstractTableModel;

import com.br.artistas.Artista;

public class TableModel extends AbstractTableModel {

List<Artista> listArtistas;

private final int COLUNA_NOME_ARTISTA = 0;	
private final int COLUNA_NOME_MUSICA = 1;
private final int COLUNA_NOME_GENERO = 2;

public TableModel(List<Artista> list){
	
	this.listArtistas = new ArrayList(list);
	
}


@Override
public int getColumnCount() {
	// TODO Auto-generated method stub
	return 3;
}

@Override
public int getRowCount() {
	// TODO Auto-generated method stub
	return this.listArtistas.size();
}

@Override
public Object getValueAt(int row, int column) {

	Artista artista = this.listArtistas.get(row);
	
	if(this.COLUNA_NOME_ARTISTA == column){
		
		return artista.getNomeArtista();
		
	}

	if(this.COLUNA_NOME_MUSICA == column){
		
		return artista.getNomeMusica();
		
	}
	
	if(this.COLUNA_NOME_GENERO == column){
		
		return artista.getGenero();
		
	}
	
	
	return null;
}

@Override
public String getColumnName(int column){
	
	if(column == this.COLUNA_NOME_ARTISTA){
		
		return "Nome";
		
	}
	
	if(column == this.COLUNA_NOME_GENERO){
		
		return "Música";
		
	}
	
	if(column == this.COLUNA_NOME_MUSICA){
		
		return "Genero";
		
	}
	
	return null;
	
}

public void addLista(List<Artista> list){
	
	this.listArtistas = list;
	
			
}

}
[/code]

é so colocar um:

modelTable.fireTableDataChanged();

depois do codigo:

modelTable.addLista(list);

isso fará com que a tabela mostre os novos valores, chamando o getValueAt(linha,coluna);

[quote=Naum Jefferson]é so colocar um:

modelTable.fireTableDataChanged();

depois do codigo:

modelTable.addLista(list);

isso fará com que a tabela mostre os novos valores, chamando o getValueAt(linha,coluna);[/quote]

Rapaz deu certo, essa é a melhor forma mesmo? Ou vc acha que tem outra pratica melhor?

Da uma olhada em:
http://www.guj.com.br/article.show.logic?id=140
principalmente esse aqui:
http://www.guj.com.br/article.show.logic?id=147
vai te ajudar, e muito!!!

E outra, voce nao deveria criar um TableModel a cada evento, deveria criar apenas um e guardar a referencia dele para modificar o conteudo.

Entao Mark essa era a ideia com o metodo addLista()…Não seria isso?

Seria sim.
Voce só devia chamar o método pra avisar a JTable de dentro do model.

  public void addLista(List<Artista> list){   
           
        this.listArtistas = list;   
         fireTableDataChanged();
                   
    }  

[quote=Marky.Vasconcelos]Seria sim.
Voce só devia chamar o método pra avisar a JTable de dentro do model.

[code]
public void addLista(List list){

    this.listArtistas = list;   
     fireTableDataChanged();
               
}  

[/code][/quote]

Essa ai era minha duvida :smiley: