Jtable + AbstractTableModeL "Repetição de Valores"

11 respostas
R

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:

11 Respostas

ViniGodoy

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

R

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!

ViniGodoy

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.

R

ViniGodoy,

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

Segue o resultado do debug no getValueAt():

ViniGodoy

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.

ViniGodoy

Pode postar sua classe Historico?

R

Segue o modelo do Historico

ViniGodoy

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.

ViniGodoy

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…

R

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

Funcionou!

Vlw!

ViniGodoy

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.

Criado 26 de julho de 2010
Ultima resposta 26 de jul. de 2010
Respostas 11
Participantes 2