ComboBox

5 respostas
fredfri

Estou precisando fazer um ComboBox igual do <select></select> do HTML que exibe para o Usuário um valor mas por traz daquele valor existe um Código.

Ex:

HTML
<select>
<option value=“valor_que_quero_pegar”>Texto para Usuário</option>
</select>

Preciso pegar o valor que vai por traz do texto de exibição…

Qualquer dica ta valendo…

Valeu abraços!!!

5 Respostas

Lucas_Teixeira

Crie um objeto que tenha a propriedade para mostrar e a propriedade que “voce que pegar”. Ao invez de adicionar um texto à combo, adicione uma nova instancia deste objeto.

Lucas_Teixeira

Na busca do forum:

http://www.guj.com.br/posts/list/18769.java

Vale uma lida…

danieldestro

Fred, vou salvar o seu dia.

A dica do Lucas Teixeira é válida, mas existe uma maneira melhor. Usando Model e Renderer.

Imagine que você tenha um objeto ou uma lista deles:

public class MeuObjeto {
    private Integer id;
    private String nome;
    
    public MeuObjeto() {
    }
    
    public Integer getId() {
        return id;
    }
    
    public void setId(Integer id) {
        this.id = id;
    }
    
    public String getNome() {
        return nome;
    }
    
    public void setNome(String nome) {
        this.nome = nome;
    }
}

E você quer mostrar o "nome" do objeto e quando selecionar, saber qual o "id" selecionado. Para isso, a melhor coisa é usar models, seja para o combobox, list, tree ou table.

Olha esse exemplo de tela:

import java.util.Vector;
import java.awt.event.*;
import javax.swing.*;

public class TelaSimples extends JFrame implements ActionListener {
    private JComboBox combo;
    
    public TelaSimples() {
        super("Tela Simples");
        JPanel pan = new JPanel();
        combo = new JComboBox();
        pan.add( combo );
        combo.addActionListener( this );
        getContentPane().add( pan );
        pack();
        setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        carregarDados();
    }
    
    public void carregarDados() {
        Vector v = new Vector();
        MeuObjeto obj = new MeuObjeto();
        obj.setId(new Integer(1));
        obj.setNome("Daniel");
        v.add( obj );
        obj = new MeuObjeto();
        obj.setId(new Integer(2));
        obj.setNome("Fred");
        v.add( obj );
        obj = new MeuObjeto();
        obj.setId(new Integer(3));
        obj.setNome("Flávio");
        v.add( obj );
        //use o renderer que criou para mostrar os dado corretamente
        MeuComboBoxRenderer renderer = new MeuComboBoxRenderer();
        combo.setRenderer( renderer );
        //você pode usar o model padrão do combobox
        DefaultComboBoxModel model = new DefaultComboBoxModel( v );
        combo.setModel( model );
    }
    
    public void actionPerformed(ActionEvent arg0) {
        MeuObjeto obj = (MeuObjeto) combo.getSelectedItem();
        System.out.println( obj.getId() + " - " + obj.getNome() );
    }

    public static void main(String[] args) {
        new TelaSimples().show();
    }
}

Eu tenho uma tela simples, com um combobox. Carrego um Vector com objetos do tipo MeuObjeto, que é o cara que eu quero mostrar e obter informações sobre. Para exibir na tela, de acordo com o que eu quero, eu crio um renderer, como abaixo:

import java.awt.Component;

import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;

public class MeuComboBoxRenderer extends JLabel implements ListCellRenderer {
    public MeuComboBoxRenderer() {
        setOpaque(true);
    }
    
    public Component getListCellRendererComponent( JList list, Object value,
            int index, boolean isSelected, boolean cellHasFocus) {
        if (isSelected) {
            setBackground(list.getSelectionBackground());
            setForeground(list.getSelectionForeground());
        } else {
            setBackground(list.getBackground());
            setForeground(list.getForeground());
        }

        //aqui você define o que exibir no combo 
        MeuObjeto obj = (MeuObjeto) value;
        this.setText( obj.getNome() );
        
        return this;
    }
}

E para atualizar o combo (ou a lista), adicionar, remover, alterar ou recuperar os dados, eu uso um model. No caso eu preferí usar um model que já existe na API do Java. A classe javax.swing.DefaultComboBoxModel, que você passa pra ele um Vector com os dados.

E para pega o "id" selecionado? Olha o método actionPerformed().

É complicado, mas depois que você faz o primeiro, você entende fácil.

fredfri

Valeu Galera, isso vai me ajudar bastante :lol:

D

Poxa, muito obrigado. Eu estava pesquisando sobre como resolver algo parecido.

Voccê resolveu meu problema também.

Abraços.

Criado 10 de janeiro de 2005
Ultima resposta 28 de ago. de 2008
Respostas 5
Participantes 4