tenho um JComBox q eh populado por objetos de uma classe
[code]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();
}
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();
[/code]
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
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
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:
[quote=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:[/quote]
Não seria isso?
[code]// Cria os itens da lista
String nomes[] = {“Carlos”, “Marcelo”, “Fabiana”,
“Carolina”, “Osmar”};
// Cria o JComboBox
combo = new JComboBox(nomes);[/code]
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
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
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();
}
}[/code]
E assim eu pego as categorias do banco e adiciono no meu ArrayList
[code] public List Consultar() throws SQLException {
ArrayList list = new ArrayList();
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…
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
[code]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”);[/code]
sendo assim a solução para vc seria implementar o método equals do seu CategoriaTO
[code]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);
}
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