Erro ao mostrar dados na Tabela

Ae galera to com um probleminha chatooo… faço a busca dos dados via banco para popular em uma JTable. Seu modelo eu implementei utilizando AbstraticTableModel. Quando busco os dados via banco ele tem que me retornar duas linhas de dados diferente Ex.: Linha1: João Linha2: Pedro, ele traz as duas linhas na JTable so que com os dados repetidos do ultimo registro buscado do banco dae fica Linha1 Pedro e Linha2 Pedro.

Abaixo o codigo que faz a busca no banco de dados e adiciona a linha:

public void popularJTable(ResultSet rs)throws SQLException{
		
		linhas = new ArrayList();
		modelo = new JTableModel(linhas,colunas);
		
		//Obtem os Meta dados do resultset
		ResultSetMetaData rsmd = rs.getMetaData();
		
		
		String[] linhaNova = new String[rsmd.getColumnCount()];
		
		//Enquanto existir dados
		while(rs.next()){
		    
			for(int i=0; i < modelo.getColumnCount(); i++){
			         switch (rsmd.getColumnType(i + 1)) {
				case Types.INTEGER: 
				        linhaNova[i] = ""+rs.getInt(rsmd.getColumnName(i + 1));
				         break;
				case Types.VARCHAR:
				         linhaNova[i] = rs.getString(rsmd.getColumnName(i + 1));
				         break;
				}
			}
			
			modelo.addRow(linhaNova);
			
		}
		jTable.setModel(modelo);
		
}

Agora o metodo que é responsavel por adicionar as linhas:

public void addRow(String[] dadosLinha){
		
		getLinhas().add(dadosLinha);
		int linha = getLinhas().size() -1;
		fireTableRowsInserted(linha,linha);
		
	}

Utilizo o tipo ArrayList para as linhas, estou começando a trabalhar agora com este tipo e não tenho muito conhecimento.

Agradeço desde já a ajuda! :slight_smile:

:cry:

Coloca teu model aqui. Eu tive um problema parecido com esse, e era no model.

Ta ae Brother!:

public class JTableModel extends AbstractTableModel {
	
	private ArrayList linhas;
	private String[] colunas;
	
	public JTableModel(ArrayList dados,String[] colunas){
		
		setLinhas(dados);
		setColunas(colunas);
	}
		
	//Retorna o numero de colunas
	public int getColumnCount(){
		return getColunas().length;
	}
	
	//Retorna o numero de linhas
	public int getRowCount(){
		return getLinhas().size();
	}
	
	//Obtem o valor da linhas e coluna
	public Object getValueAt(int rowIndex, int columnIndex){
		
		//Recebe a linha, passando por cast para String[]
		String[] linha = (String[])getLinhas().get(rowIndex);
		
		//Retorna o objeto na posição de columnIndex
		return linha[columnIndex];
		
	}
	
	//Seta valor da linha e coluna
	public void setValueAt(Object value,int rowIndex, int columnIndex){
		
		String[] linha = (String[])getLinhas().get(rowIndex);
		//Altera o conteúdo da linha na posição do indice columnIndex
		linha[columnIndex] = (String)value;
		//Dispara o evento da celula alterada
		fireTableCellUpdated(rowIndex, columnIndex);
		
	}
	
	//Adiciona nova linha
	public void addRow(String[] dadosLinha){
		
		getLinhas().add(dadosLinha);
		//Informa ao JTable que ouve linhas incluidas no modelo
		//Como os dados são adicionados no final pega o tamanho total das linhas
		//menos 1 para obter a linha incluida.
		int linha = getLinhas().size() -1;
		fireTableRowsInserted(linha,linha);
		
	}
	
	//Remove linha
	public boolean removeRow(String val, int col){
		//obtem o iterator
		Iterator i = getLinhas().iterator();
		//Guarda as linhas percorridas
		int linha = 0;
		//Faz um loop enquando obtiver dados
		while(i.hasNext()){
			//Obtem as colunas da linha atual
			String[] linhaCorrente = (String[])i.next();
			linha++;
			//Compara o valor da linha atual na coluna e valor 
			//informado por parametro
			if(linhaCorrente[col].equals(val)){
				getLinhas().remove(linha);
				//informa a JTable que houve dados deletados 
				//passando a linha removida
				fireTableRowsDeleted(linha,linha);
				return true;
			}
		}
		//Caso não encontre o valor
		return false;
	}
	
	
	//Retorna o nome da coluna
	//getColumnName[col] retorna na posição do indice! 
	public String getColumnName(int col){
		return getColunas()[col];
	}
	
	
	public ArrayList getLinhas(){
		return linhas;
	}
	
	public String[] getColunas(){
		return colunas;
	}
	
	public void setLinhas(ArrayList dados){
		linhas = dados;
		
	}
	
	public void setColunas(String[] dados){
		colunas = dados;
	}
	

}

Quando eu tive um problema parecido, eu tava fazendo meu model com um Set, e todas as linhas saíam iguais.

Aqui tem a implementação com um ArrayList, que funciona 100%

public class ClienteContasCorrentesTableModel extends AbstractTableModel {
    private final String[] columnNames = new String [] {"Nome do Banco", "Número da Agência", "Número da conta", "Nome do Títular"};
    private final Class[] types = new Class [] {String.class, String.class, String.class, String.class};
    private final ArrayList&lt;ContaCorrente&gt; contas = new ArrayList&lt;ContaCorrente&gt;();
    
    public ClienteContasCorrentesTableModel() {
        super();
    }
    
    public ClienteContasCorrentesTableModel(Collection&lt;ContaCorrente&gt; valores) {
        if(valores != null) contas = new ArrayList&lt;ContaCorrente&gt;(valores);
    }
    
    public void addRow(ContaCorrente cc) {
        contas.add(cc);
    }
    
    public Class&lt;?&gt; getColumnClass(int columnIndex) {
        return types[columnIndex];
    }

    public int getColumnCount() {
        return this.columnNames.length;
    }

    public String getColumnName(int columnIndex) {
        return this.columnNames[columnIndex];
    }
    
    public Set getContasCorrentes() {
        Set ccs = new HashSet();
        for(ContaCorrente cc : contas) ccs.add(cc);
        
        return ccs;
    }
    
    public ContaCorrente getRow(int rowIndex) {
        return contas.get(rowIndex);
    }
    
    public int getRowCount() {
        return this.contas.size();
    }
    
    public Object getValueAt(int rowIndex, int columnIndex) {
        switch(columnIndex) {
            case 0:
                return contas.get(rowIndex).getBanco().getCod_banco();
            case 1:
                return contas.get(rowIndex).getNum_agencia();
            case 2:
                return contas.get(rowIndex).getNum_conta_corrente();
            case 3:
                return contas.get(rowIndex).getNme_titular();
            default:
                return null;
        }
    }
    
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        if(columnIndex &gt; 0) {
            return true;
        } else {
            return false;
        }
    }
    
    public void removeRow(int rowIndex) {
        contas.remove(rowIndex);
        fireTableDataChanged();
    }

    public void setValueAt(Object value, int rowIndex, int columnIndex) {
        switch(columnIndex) {
            case 0:
                contas.get(rowIndex).setCod_banco(Integer.parseInt(value.toString()));
                break;
            case 1:
                contas.get(rowIndex).setNum_agencia(value.toString());
                break;
            case 2:
                contas.get(rowIndex).setNum_conta_corrente(value.toString());
                break;
            case 3:
                contas.get(rowIndex).setNme_titular(value.toString());
                break;
            default:
                break;
        }
        
        fireTableCellUpdated(rowIndex,columnIndex);
    }

Muito bom esse teu exemplo… Utilizando obejtos… Vlw Parceiro pela ajuda!!!
:smiley: