Jtable + AbstractTableModeL "Repetição de Valores"

Tenho Jtable que é preenchido por uma Lista. O problema está quando o Jtable está sendo preenchido, ele está pegando os valores do ultimo registro e preechendo as linhas a quantidade de registros que o select retornou!

Obs: Deu um print em uma coluna dentro do while e está retornando os valores corretamente.

Lista:

TableModel:

Aparentemente seu código está certo. Já tentou usar um depurador dentro do TableModel?

Executei e aparentemente passa normalmente como minhas outras Jtables!

Segue a Tela com a repetição e o select!

Eu já tive problemas iguais a esse e era devido ao argumento static que tinha na query dessa forma que estpou testando nem argumento precisa para executar a query!

O ideal é parar o debug no getValueAt() e olhar o conteúdo da lista. Veja se lá dentro os objetos estão mesmo com todos os campos repetidos. Ou se a lista dentro do model está mesmo certa.

ViniGodoy,

Como você falou os falores no getValuesAt() estão mesmo iguais nos cincos objetos retornados!

Segue o resultado do debug no getValueAt():

Então o problema não está no TableModel. Mas na carga da lista.

Ou em algum momento entre a carga da lista e a adição no tablemodel.

Pode postar sua classe Historico?

Segue o modelo do Historico

Está aí o problema. Retire as palavras static de todo código.

O static significa que o atributo e o método é da classe, não da instância. Portanto, de nada adianta dar “new”. Serão objetos diferentes apontando para o mesmo atributo, o da classe.

Usar static é muito raro. E deve ser feito com cuidado.

Abaixo o código corrigido:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sgd.modelo;

public class Historico {

    private String cd_documento;
    private String cd_movimentacao;
    private String ds_documento;
    private String nm_resp_atual;
    private String nm_resp_dest;
    private String ds_depto_atual;
    private String ds_depto_dest;
    private String movimetacao;
    private String dt_movimentacao;
    private String st_documento;

    /**
     * @return the ds_documento
     */
    public String getDs_documento() {
        return ds_documento;
    }

    /**
     * @param aDs_documento the ds_documento to set
     */
    public void setDs_documento(String aDs_documento) {
        ds_documento = aDs_documento;
    }

    /**
     * @return the nm_resp_atual
     */
    public String getNm_resp_atual() {
        return nm_resp_atual;
    }

    /**
     * @param aNm_resp_atual the nm_resp_atual to set
     */
    public void setNm_resp_atual(String aNm_resp_atual) {
        nm_resp_atual = aNm_resp_atual;
    }

    /**
     * @return the nm_resp_dest
     */
    public String getNm_resp_dest() {
        return nm_resp_dest;
    }

    /**
     * @param aNm_resp_dest the nm_resp_dest to set
     */
    public void setNm_resp_dest(String aNm_resp_dest) {
        nm_resp_dest = aNm_resp_dest;
    }

    /**
     * @return the ds_depto_atual
     */
    public String getDs_depto_atual() {
        return ds_depto_atual;
    }

    /**
     * @param aDs_depto_atual the ds_depto_atual to set
     */
    public void setDs_depto_atual(String aDs_depto_atual) {
        ds_depto_atual = aDs_depto_atual;
    }

    /**
     * @return the ds_depto_dest
     */
    public String getDs_depto_dest() {
        return ds_depto_dest;
    }

    /**
     * @param aDs_depto_dest the ds_depto_dest to set
     */
    public void setDs_depto_dest(String aDs_depto_dest) {
        ds_depto_dest = aDs_depto_dest;
    }

    /**
     * @return the movimetacao
     */
    public String getMovimetacao() {
        return movimetacao;
    }

    /**
     * @param aMovimetacao the movimetacao to set
     */
    public void setMovimetacao(String aMovimetacao) {
        movimetacao = aMovimetacao;
    }

    /**
     * @return the dt_movimentacao
     */
    public String getDt_movimentacao() {
        return dt_movimentacao;
    }

    /**
     * @param aDt_movimentacao the dt_movimentacao to set
     */
    public void setDt_movimentacao(String aDt_movimentacao) {
        dt_movimentacao = aDt_movimentacao;
    }

    /**
     * @return the st_documento
     */
    public String getSt_documento() {
        return st_documento;
    }

    /**
     * @param aSt_documento the st_documento to set
     */
    public void setSt_documento(String aSt_documento) {
        st_documento = aSt_documento;
    }

    /**
     * @return the cd_documento
     */
    public String getCd_documento() {
        return cd_documento;
    }

    /**
     * @param aCd_documento the cd_documento to set
     */
    public void setCd_documento(String aCd_documento) {
        cd_documento = aCd_documento;
    }

    /**
     * @return the cd_movimentacao
     */
    public String getCd_movimentacao() {
        return cd_movimentacao;
    }

    /**
     * @param aCd_movimentacao the cd_movimentacao to set
     */
    public void setCd_movimentacao(String aCd_movimentacao) {
        cd_movimentacao = aCd_movimentacao;
    }

  }

Outra coisa. Por que tantos atributos são Strings? Use String somente para representar texto. Os demais tipos de dados tem classes ou tipos apropriados, como int, Calendar, double, boolean…

Era isso mesmo, só deixei o cd-documento como static pq era arqgumento do array!

Funcionou!

Vlw!

Volto a ressaltar. Use String somente para guardar TEXTO, apenas TEXTO e nada mais do que TEXTO. Os demais campos, leia com seus dados corretos.

E não use static a torto e a direita. O uso do static é bastante raro e geralmente causa de problemas.