JComboBox dinamico

5 respostas
R

Ola galera!!

Criei um painel onde tem adicionado um JComboBox. Ao JComboBox ser criado eu chamo um controle que chama um dao que me retorna um List de objetos e adiciono no JComoboBox através do metodo addItem.

Porem na hora de visualizar a aplicação ele me mostra a package da classe…rsrss, isso pode ser possivel devido que na classe existem 2 atributos.

Gostaria de saber como faço para setar o JComoboBox para eu escolher qual dos atributos eu gostaria que fosse mostrado e também quando o usuario escolhe-se a opção ele me retorna-se o objeto escolhido.

Isso tem como?

5 Respostas

gobbo

sobrescreva o metodo toString() e faça um metodo pra voce escolher qual atributo voce irá mostrar
acho que funciona…

R

Tem como vc me dar um exemplo?

Segue abaixo o meu codigo

private JComboBox getCampoEstoque() {
		if (campoEstoque == null) {
			campoEstoque = new JComboBox();		
			campoEstoque.setBounds(new Rectangle(90, 140, 200, 25));
			campoEstoque.setBackground(SystemColor.control);
			campoEstoque.setFont(new Font("Arial", Font.PLAIN, 10));
			
			List list = controle.listarEstoque();
			Iterator lista = list.listIterator();			
			Estoque estoque;
			
			while(lista.hasNext())
			{
				estoque = (Estoque) lista.next();
				campoEstoque.addItem(estoque);				
				
			}
		}
		return campoEstoque;
	}
gobbo

se for pra você fazer a coisa certinha, deve criar uma constante pra cada atributo…

public static final int ATRIBUTO_1 = 1;
public static final int ATRIBUTO_2 = 2;
//...

crie um metodo que seta qual atributo mostrar. tem-se que criar uma variavel para receber isso…

public int viewedField;

public void setViewedFieldInToString(int field){
    this.viewedField = field;
}

sobrescreva o metodo toString (que é usado pra escrever o nome na combobox)
faça switch para ver qual campo foi escolhido…

pode-se melhorar isso usando uma enum com os atributos e/ou mudando a estrutura interna de dados (atributos no caso) para que o codigo fique mais robusto

isso na classe Estoque…

nas linhas

while(lista.hasNext())
			{
				estoque = (Estoque) lista.next();
				campoEstoque.addItem(estoque);				
				
			}

mude

campoEstoque.addItem(estoque);

pra

campoEstoque.addItem(estoque.toString());

tambem pode rolar

Mitsukai

Amigo, na verdade a resposta para o que você está tentando fazer já está aqui mesmo no GUJ, pois recentemente quiz fazer algo do gênero..

Mas como não lembro qual o tópito, vou postar aqui pra te dar uma mão =p

private JComboBox getCampoEstoque() {  
        if (campoEstoque == null) {
            campoEstoque = new JComboBox();
            campoEstoque.setBounds(new Rectangle(90, 140, 200, 25));
            campoEstoque.setBackground(SystemColor.control);
            campoEstoque.setFont(new Font("Arial", Font.PLAIN, 10));
            
            /*aqui o seu método listarEstoque() deve retornar
            uma lista de objetos do tipo estoque*/
            List<Estoque> list = controle.listarEstoque();
            
            DefaultComboBoxModel model = new DefaultComboBoxModel();
            for (Estoque estoque : list) {
               model.addElement(estoque);
            }
            campoEstoque.setModel(model);
        }
        return campoEstoque;
    }

Seu erro estava em tentar adcionar diretamente no comboBox.. Podendo trabalhar com o model.. Você deve utilizar o model sempre pra trabalhar com os dados do componente.. Como JList ou JComboBox.

Agora uma dica interessante que antes eu não tinha encontrado no fórum, mas um amigo tinha me dito como fazer, é trabalhar com o toString() no objeto, pra retornar extamente o que queremos no ComboBox (nesse caso), utilizando @OverWrite como o nosso colega gobbo falou. Nesse caso você deve por isso no seu objeto Estoque, e dando como retorno um atributo String desse onjeto para ser mostrado no combo.

R

Pessoal, muito obrigado pela ajuda.

Criado 7 de maio de 2008
Ultima resposta 8 de mai. de 2008
Respostas 5
Participantes 3