ComboBox populado duas vezes [RESOLVIDO]

6 respostas
guisantogui

Gente tenho o meu comboBox ta funcionando legal, mas naum sei pq ele puxa os dados duas vezes do Banco de Dados

[CODIGO]

public void initComboBox(){
        try {
            ResultSet rs = super.getConnBD().getStm().executeQuery("SELECT descricao FROM fn_ccusto");

            if(rs.first()){
                do{
                    this.addItem(rs.getObject(1));
                }
                while(rs.next());
            }
        }
        catch (SQLException ex){
            ex.printStackTrace();
        }
    }

[CODIGO CLASSE PAI]

private DAOPai connBD = null;

    public ColunaComboBox(){
        connBD = new BancoDAO();
    }

    public DAOPai getConnBD() {
        return connBD;
    }

    public void listar(){
        for(int i = 0; i < this.getItemCount(); i++){
            System.out.println(this.getItemAt(i).toString());
        }
    }

[CLASSE DAOPAI]

package Classes.DAO;

import BancoDeDados.GerenciaConexaoBancoComDados;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.logging.Level;
import java.util.logging.Logger;

public class DAOPai {

    protected StringBuilder constroiSql = null;
    protected SimpleDateFormat sdf = null;
    protected DateFormat formatador;
    protected ResultSet rs = null;
    protected Statement stm = null;
    protected GerenciaConexaoBancoComDados gcbd = null;

    public DAOPai(){
        gcbd = new GerenciaConexaoBancoComDados();
        constroiSql = new StringBuilder();
        sdf = new SimpleDateFormat("ddMMyyy");
        this.formatador = this.sdf;
        try {
            this.stm = gcbd.getBanco().getConexao().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
        }
        catch (SQLException ex) {
            Logger.getLogger(DAOPai.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

PS.: Debuguei, mas não achei o erro! D:

6 Respostas

G

fn_ccusto é uma função no bd, ou uma tabela?

Se for uma função teste o retorno dela, pois ela pode estar gerando os valores duplicados.

guisantogui

Eh uma tabela, sabe onde pode estar o erro?

G

cara… naum consegui enxergar o erro pois naum entendi algumas partes do seu codigo,
por exemplo:

onde o metodo initComboBox() é chamado?

quem é a classe BancoDao em

connBD = new  BancoDAO();

mas pra resolver o teu problema, tenta fazer o seguinte:

pelo visto a tua classe estende a JcomboBox, certo?

entaum no metodo initComboBox(); coloque o comando

this.removeAllItems();

antes do loop que preenche o combo, desta forma não importa quantas vezes o metodo initComboBox() é chamado, ele vai sempre limpar os dados antes de preencher novamente.

T
public void popularComboAssunto(){

    cad_acervo.executeSQL("select Descricao_Assunto from Assunto");
        try {
                Jcombo_Assunto.removeAllItems();//aqui ele remove as duplicidades
                Jcombo_Assunto.addItem("ESCOLHA UMA OPÇÃO");//aqui ele seta um valo default para a inicialização do combo
            while (cad_acervo.resultset.next()) {
                Jcombo_Assunto.addItem(cad_acervo.resultset.getString("Descricao_Assunto"));
            }
        } catch (SQLException ex) {
            Logger.getLogger(Cad_Acervo.class.getName()).log(Level.SEVERE, null, ex);
        }
   }
guisantogui

Não sei pq, mas quando eu tiro o metodo initComboBox() da minha classe que extende uma classe q extende JComboBox, ele funciona sem duplicar os dados, mas naum entendi o pq?

classes completas:

Classe q extende ComboBox

package Classes.Modelos;

import Classes.DAO.DAOPai;
import javax.swing.JComboBox;

public class ColunaComboBox extends JComboBox{

    private DAOPai connBD = null;

    public ColunaComboBox(){
        connBD = new DAOPai();
    }

    public DAOPai getConnBD() {
        return connBD;
    }

    public void listar(){
        for(int i = 0; i < this.getItemCount(); i++){
            System.out.println(this.getItemAt(i).toString());
        }
    }
}

classe que extende ColunaComboBox

package Classes.Modelos;

import java.sql.ResultSet;
import java.sql.SQLException;

public class CombBoxTabCentCustGrupos extends ColunaComboBox {

    public CombBoxTabCentCustGrupos(){
        super();
        initComboBox();
        this.setEditable(true);
    }

    public void initComboBox(){
        try {
            ResultSet rs = super.getConnBD().getStm().executeQuery("SELECT descricao FROM fn_ccusto");
            if(rs.first()){
                do{
                    this.addItem(rs.getObject(1));
                }
               while(rs.next());
            }
        }
        catch (SQLException ex){
            ex.printStackTrace();
        }
    }

    @Override
    public void listar(){
        super.listar();
    }
}

classe DAOPai

package Classes.DAO;

import BancoDeDados.GerenciaConexaoBancoComDados;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import java.text.DateFormat;
import java.text.SimpleDateFormat;

public class DAOPai {

    protected StringBuilder constroiSql = null;
    protected SimpleDateFormat sdf = null;
    protected DateFormat formatador;
    protected ResultSet rs = null;
    protected Statement stm = null;
    protected GerenciaConexaoBancoComDados gcbd = null;

    public DAOPai(){
        gcbd = new GerenciaConexaoBancoComDados();
        constroiSql = new StringBuilder();
        sdf = new SimpleDateFormat("ddMMyyy");
        this.formatador = this.sdf;
        try {
            this.stm = gcbd.getBanco().getConexao().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
        }
        catch (SQLException ex) {
            ex.printStackTrace();
        }
    }

    public DAOPai(SimpleDateFormat sdf, StringBuilder sb, GerenciaConexaoBancoComDados gcbd){
        this.constroiSql = sb;
        this.sdf = sdf;
        this.gcbd = gcbd;
        this.formatador = this.sdf;
        try {
            this.stm = gcbd.getBanco().getConexao().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
        }
        catch (SQLException ex) {
            ex.printStackTrace();
        }
    }

    public DAOPai(SimpleDateFormat sdf, StringBuilder sb){
        this.constroiSql = sb;
        this.sdf = sdf;
        this.gcbd = new GerenciaConexaoBancoComDados();
        this.formatador = this.sdf;
        try {
            this.stm = gcbd.getBanco().getConexao().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
        }
        catch (SQLException ex) {
            ex.printStackTrace();
        }
    }

    public GerenciaConexaoBancoComDados getGcbd() {
        return gcbd;
    }

    public ResultSet getRs() {
        return rs;
    }

    public Statement getStm() {
        return stm;
    }
}
guisantogui

Consegui resolver!

Criado 7 de junho de 2010
Ultima resposta 8 de jun. de 2010
Respostas 6
Participantes 3