Comparações entre Objetos para popular JComboBox

11 respostas
furacao123

tenho um JComBox q eh populado por objetos de uma classe

package TO;

public class CategoriaTO {

    private int id;
    private String Descricao;

    public String getDescricao() {
        return Descricao;
    }

    public int getId() {
        return id;
    }

    public void setDescricao(String Descricao) {
        this.Descricao = Descricao;
    }

    public void setId(int id) {
        this.id = id;
    }

    /**
    * Faz com que a descrição seja mostrada no combo
    */  
    @Override
   public String toString() {
      return this.getDescricao();
   }

}
Classe Produto
package TO;

import DAO.CategoriaDAO;
import DAO.FornecedorDAO;
import java.sql.SQLException;

public class ProdutoTO {

    private int id;
    private String Descricao;
    //...
    private CategoriaTO categoriaTO;

     public CategoriaTO getCategoriaTO() {
        return categoriaTO;
    }
    public void setCategoriaTO(CategoriaTO categoriaTO) {
        this.categoriaTO = categoriaTO;
    }
//RECEBE ID DA CONSULTA NO BANCO E REALIZA A CONSULTA PARA POPULAR O OBJETO categoriaTO
    public void setCategoriaTO(int id_categoria) throws SQLException {
        this.categoriaTO = new CategoriaDAO().Consultar(id_categoria);
    }
//...
@Override
    public String toString() {
        return this.getDescricao();
e com esse objeto categoria eu populo o banco...mas na hora q eu quero pegar um certo produto ja cadastrado e editar eu quero q o combo ja mostre selecionado a categoria q esta cadastrada no banco mas na hora q eu comparo
Combo.SetSelectedItem(objetoProduto.CategoriaTO().getDescricao());

ele nao consegue achar ja mandei imprimir o valor do combo e eh identico, porque nao consigo fazer essa verificação?
}

11 Respostas

Lavieri

o valor que aparece no combobox é o mesmo do Object.toString() que esta nele

porem quando vc vai setar o seu valor, vc deve setar com o Object e não com o toString()

tente assim

combo.setSelectedItem(objetoProduto.CategoriaTO());

So pra esclarecer… par ao combobox o que esta nele é sermpre um Object, ele nunca pensa que tem uma string la… e ele sempre usa o método Object.toString() para exibir o conteudo do objeto. e o metodo Object.equals(selectedItem) para encontrar o valor que vc esta passando no set

Portanto nunca sete pelo texto, e sim pelo proprio objeto

samea

Oi gente, estou entando add diretorios em um comboBox a uma semana alguem sabe com se add diretorios em comboBox, podem postar algum codigo?
por favor! :oops:

furacao123

mas eu tentei comparar pelo objeto tambem mas ele nao consegue fazer a comparação nao seleciona o meu item no JComboBox

Matheus_Leandro_Ferr
samea:
Oi gente, estou entando add diretorios em um comboBox a uma semana alguem sabe com se add diretorios em comboBox, podem postar algum codigo? por favor! :oops:

Não seria isso?

// Cria os itens da lista
String nomes[] = {"Carlos", "Marcelo", "Fabiana",
"Carolina", "Osmar"};

// Cria o JComboBox
combo = new JComboBox(nomes);

o que você quer dizer com diretorios?

Lavieri

mostra ai o código que vc usou pra popular o COmbobox…
a parte que tem …
combobox.setModel(…) ou new JComboBox(…);

vc so pode dar setSelectedCOmboBox, em um Objeto que vc tenha adcionado no combobox pelo seu model

furacao123

Populando comboCategoria

private void ObterRegistroCategoria() { try { ListaCategoria = categoriaDAO.Consultar(); int i = 0; while (i < ListaCategoria.size()) { categoriaTO = (CategoriaTO) ListaCategoria.get(i); i++; } Categoria.addAll(ListaCategoria); } catch (Exception e) { e.printStackTrace(); } }

ListaCategoria eh do tipo List essa consulta me retorna uma lista com varios objetos do tipo CategoriaTO onde tenho ID e Descricao na classe CategoriaTO eu do um override no metodo ToString() para retorna Descricao…assim populo meu combo soh com a descricao do objeto CategoriaTO

private void PopulaComboCategoria() { ObterRegistroCategoria(); cbCategoria.setModel(new javax.swing.DefaultComboBoxModel(Categoria)); }

Lavieri

como esse objeto funciona ??

Categoria.addAll(ListaCategoria); … o.O vc inciia objeto com letras maiusculas ?? ou isso é uma classe estatica ??

preciso saber o que vc esta insirindo dentro do combo box… quais objetos estão indo ali pro cbox…

veja que vc faz depois

cbCategoria.setModel(new javax.swing.DefaultComboBoxModel(Categoria));

portanto isso é o importante… saber como Categoria adciona a lista de categoria…

lembrando que… c vc adciona uma List<CategoriaTO> (Categoria é um objeto do tipo List<CategoriaTO> ??? ) dentro do model… dentro dele vai ter objetos CategoriaTO e não objetos String … mesmo o combobox mostrando CategoriaTO.toString() … o que esta la é o CategoriaTO e não a string…

sendo assim, se esse for o caso, vc tem que olhar como CategoriaTO implementa .equals(Object o) … para garantir que quando objetos com o mesmo conteúdo forem comparado, o seu sistema retorne true, para esse equals… pois é isso que o combobox vai fazer na hora que vc der set! no combobox

furacao123
CategoriaTO eh um objeto dessa classe
package TO;

public class CategoriaTO {

    private int id;
    private String Descricao;

    public String getDescricao() {
        return Descricao;
    }

    public int getId() {
        return id;
    }

    public void setDescricao(String Descricao) {
        this.Descricao = Descricao;
    }

    public void setId(int id) {
        this.id = id;
    }

    /**
    * Faz com que a descrição seja mostrada no combo
    */  
    @Override
   public String toString() {
      return this.getDescricao();
   }

}
E assim eu pego as categorias do banco e adiciono no meu ArrayList
public List Consultar() throws SQLException {
        ArrayList list = new ArrayList();

        CategoriaTO categoria = new CategoriaTO();

        PreparedStatement stmt = this.connection.prepareStatement("SELECT * FROM categoria");
        try {
            ResultSet resultado = stmt.executeQuery();

            categoria = new CategoriaTO();
            categoria.setId(new Integer(0));
            categoria.setDescricao("SELECIONE");
            list.add(categoria);

            while (resultado.next()) {
                categoria = new CategoriaTO();
                categoria.setId(new Integer(resultado.getInt(1)));
                categoria.setDescricao(resultado.getString(2));
                list.add(categoria);
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            stmt.close();
        }
        return list;
    }
}
Lavieri

bom, neste caso, me como vc não usa ferramentas de persisencia, vc deve ter 2 intancias da mesma row de uma tabela... o que acontece
vc esta adcionando varios objetos a um combobox...

na hora que vc faz

combobox.setSelectedItem(meuEspecificoCategoriaTO);

o combobox vai testar se a sua lista comtem o meuEspecificoCategoriaTO, e ele testa se contem usando .equals ... como vc não implementou o .equals no seu CategoriaTO objeto... ele vai testar se o meuEspecificoCategoriaTO.hashCode() é igual a alguem que esta dentro do objeto... e isso só sera verdade quando a instancia dos 2 são iguais....

vamos entender assim
CategoriaTO cat1 = new CategoriaTO();
CategoriaTO cat2 = new CategoriaTO();

cat1.setId(10);
cat1.setDescricao("desc teste");

cat2.setId(10);
cat2.setDescricao("desc teste");

//mesmo os 2 contendo o mesmo valor, c vc fizer
if (cat1 == cat2) 
    System.out.println("Isso sempre retorna falso, não tem o que fazer pois são objetos diferentes");

if (cat1.equals(cat2))
    System.out.println("Isso só esta retornando falso, pq vc não implementou o equals, e assim o objeto não sabe como testar igualdade");
sendo assim a solução para vc seria implementar o método equals do seu CategoriaTO
public class CategoriaTO { 
//....

    public boolean equals(Object o) {
        if (o instanceof CategoriaTO)
                equals((CategoriaTO)o);
        if (o instanceof String)
                equals((String)o);
        return false;
    }
    
    public boolean equals(CaegoriaTO categoria) {
        return categoria.id == this.id; //se vc quiser vc pode testar a String tb e so voltar verdadeiro se o ID e String forem iguais
    }
    //Esse equals aqui c vc quiser não precisa... mais com ele vc pode fazer ... categoria.equals("Descricao"); e saber c a descrição bate ^^
    public boolean equals(String descricao) {
        return this.descricao.equals(descricao);
    }
}

da uma olhada neste post aqui qualquer coisa http://www.guj.com.br/posts/list/116766.java
acabei de explicar prum cara essa mesma coisa de hashcode e equals

fabim

implemente tambem o hashChode pra funcionar.

furacao123

como implemento tambem o metodo hashCode(); ?

desse modo eu consigo comparar objetos da classe CategoraTO mas mesmo assim nao obtive resultado soh se eu instanciar um novo objeto e setar os atributos iguais ele faz a comparação correta

Criado 30 de janeiro de 2009
Ultima resposta 2 de fev. de 2009
Respostas 11
Participantes 5